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.
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.
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.
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
}
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
}
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")
}
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
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
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
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.
- Indice
- Sección anterior: Procesando la entrada de los formularios
- Siguiente sección: Cross site scripting