Skip to content

Latest commit

 

History

History
141 lines (92 loc) · 6.43 KB

File metadata and controls

141 lines (92 loc) · 6.43 KB

4.2 Verificando las entradas

El principio más importante en el desarrollo web es que no se puede confiar en nada del formulario de usuario, usted tiene que verificar todos los datos antes de usarlos. Usted sabe que muchas páginas web son invadidas por este problema, que es simple, pero crucial.

Hay dos maneras de verificar los datos del formulario que comúnmente se utilizan, el que hace la verificación JavaScript en front-end, y otra es la verificación del servidor de back-end. En esta sección, vamos a hablar de la comprobación del servidor en el desarrollo web.

Los campos necesarios

A veces le preguntas a los usuarios la entrada de algunos campos, pero no lo hace, por ejemplo, necesita nombre de usuario en la sección anterior. Puede utilizar la función len para obtener la longitud de campo de entrada de informacion de los usuarios.

if len(r.Form["username"][0])==0{
	// Código para el campo vacío
}

r.Form utiliza diferentes tratamientos de diferentes tipos de elementos de formulario cuando son espacios en blanco. Para la caja de texto vacío, área de texto y archivo de carga, devuelve cadena vacía; casilla de verificación y botón de radio, ni siquiera crear elementos correspondientes, y obtendrá los errores si se intenta acceder a él. Por lo tanto, será mejor que usamos r.Form.Get() para obtener los valores presentados porque siempre vuelve vacía si el valor no existe. Por otro lado, r.Form.Get() sólo puede obtener un valor de campo cada vez, así que tienes que usar r.Form para obtener valores en un map.

Numeros

A veces sólo se necesita un número para el valor del campo. Por ejemplo, usted necesita la edad de los usuarios, al igual que 50 o 10, en lugar de "la edad suficiente" o "joven". Si necesitamos números positivos, podemos convertir a tipo int primero y procesarlos.

getint,err:=strconv.Atoi(r.Form.Get("age"))
if err!=nil{
	// Error se produce cuando se convierte a Number, no es un número
}

// verificación de número
if getint >100 {
	// too big
}

Otra forma de hacerlo es usando la expresión regular.

if m, _ := regexp.MatchString("^[0-9]+$", r.Form.Get("age")); !m {
	return false
}

Con fines de alto rendimiento, la expresión regular no es una manera eficiente, pero la expresión regular simple es lo suficientemente rápido. Si sabes expresión regular, usted debe usar esta forma, es muy conveniente para verificar los datos. Observe que Go utiliza RE2 , se admiten todos los caracteres UTF-8.

China

A veces necesitamos a los usuarios introducir su nombre chino, tenemos que verificar que utilizan todos los chinos en lugar de caracteres aleatorios. Para la verificación de China, la expresión regular es la única manera.

if m, _ := regexp.MatchString("^[\\x{4e00}-\\x{9fa5}]+$", r.Form.Get("realname")); !m {
	return false
}

Letras inglesas

A veces necesitamos que los usuarios de entrada de las letras inglesas. Por ejemplo, necesitamos de alguien nombre Inglés, como astaxie lugar de 谢 asta. Podemos utilizar simplemente la expresión regular para hacer la verificación.

if m, _ := regexp.MatchString("^[a-zA-Z]+$", r.Form.Get("engname")); !m {
	return false
}

Dirección de correo electrónico

Si usted quiere saber si la entrada de los usuarios la dirección de correo electrónico válida, puede utilizar siguiente expresión regular:

if m, _ := regexp.MatchString(`^([\w\.\_]{2,10})@(\w{1,}).([a-z]{2,4})$`, r.Form.Get("email")); !m {
	fmt.Println("no")
}else{
	fmt.Println("yes")
}

Lista desplegable

Cuando necesitamos artículo en nuestra lista desplegable, pero tenemos algunos valores que son realizados por hackers, ¿cómo podemos evitarlo?

Supongamos que tenemos siguiente <select>:

<select name="fruit">
<option value="apple">apple</option>
<option value="pear">pear</option>
<option value="banane">banane</option>
</select>

A continuación, utilizamos siguiente manera de verificar:

slice:=[]string{"apple","pear","banane"}

for _, v := range slice {
	if v == r.Form.Get("fruit") {
    	return true
	}
}
return false

Todas las funciones que mostré anteriormente están en mi proyecto de código abierto para el slice de funcionamiento y el map: https://github.com/astaxie/beeku

Los botones radio

Si queremos saber el usuario es hombre o mujer, podemos utilizar un botón de radio, devolverá 1 para hombres y 2 para mujeres. Sin embargo, hay un pequeño niño está leyendo el libro sobre HTTP, y enviar a usted 3, tendrá su programa excepción? Así que tenemos que utilizar el mismo camino para lista desplegable para asegurarse de que se espera que todos los valores.

<input type="radio" name="gender" value="1">Male
<input type="radio" name="gender" value="2">Female

Y utilizamos siguiente código para hacer la verificación:

slice:=[]int{1,2}

for _, v := range slice {
	if v == r.Form.Get("gender") {
    	return true
	}
}
return false

Las casillas de verificación

Supongamos que hay algunas casillas de verificación de los intereses de los usuarios, y no quieren utilizar los valores adicionales también.

<input type="checkbox" name="interest" value="football">Football
<input type="checkbox" name="interest" value="basketball">Basketball
<input type="checkbox" name="interest" value="tennis">Tennis

Aquí es un poco diferente en la verificación entre los botones de radio y casillas de verificación porque conseguimos un slice de casillas de verificación.

slice:=[]string{"football","basketball","tennis"}
a:=Slice_diff(r.Form["interest"],slice)
if a == nil{
	return true
}

return false 

Fecha y hora

Suponga que quiere la entrada de usuarios de fecha u hora válida. Go tiene paquete time para convertir el año, mes, día de tiempo correspondiente, entonces es fácil comprobarlo.

t := time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC)
fmt.Printf("Go launched at %s\n", t.Local())

Después de tener time, se puede utilizar el paquete time para más operaciones dependiendo de sus propósitos.

Hablamos acerca de algún tipo de verificación de datos de formulario común en el lado del servidor, espero que haya entendido más acerca de la verificación de datos en el Go, especialmente cómo utilizar expresiones regulares.

Enlaces