5

¿Es mejor validar la entrada del usuario antes de enviarla al servidor con JS o al lado del servidor con PHP? ¿O tal vez vale la pena hacer ambas cosas solo para estar seguros?Validación de entrada de usuario, del lado del cliente o del lado del servidor? [PHP/JS]

Estoy creando un sitio (muy simple en este momento) que tiene un área de miembros/área de administración/etc. Por el momento, solo tengo la entrada del usuario de nombre de usuario y contraseña, en el futuro habrá más (correo electrónico, dirección, etc.), pero ¿cuál es la mejor práctica para verificar los datos?

¿Lanzo una carga de instrucciones 'if ... else' hasta que el usuario lo hace bien? ¿O tal vez tiene variables separadas para cada valor ingresado por el usuario y lo establece en verdadero o falso si es correcto o incorrecto? (como la validación de correo electrónico para asegurarse de que esté en un formato de correo electrónico)

Hay muchas maneras de hacerlo, pero ¿cuáles sugerirías? No quiero escribir 50 líneas de código cuando podría hacer el trabajo en 10 líneas ... si eso tiene sentido: p

¡Cualquier ayuda sería apreciada, gracias! :) validación del lado del servidor

Respuesta

8

es una necesidad , la validación del lado del cliente es un más.

Si solo utiliza la validación del lado del cliente, las personas nefastas piratearán su sistema para publicar cosas no validadas, rompiendo sus scripts y potencialmente explotando su sistema. Esto es muy malo desde un punto de vista de seguridad.

Dicho esto, también debe incluir la validación del lado del cliente, ya que es mucho más rápido que un viaje de ida y vuelta al servidor, y le da a sus usuarios comentarios instantáneos. Esto mantendrá contentos a los usuarios y los hará volver a su sitio.

Por lo tanto, si es posible, utilice ambos. Si no puede/no quiere, al menos hágalo desde el servidor. ¡La validación del lado del cliente es una receta para el desastre!

5

Haga ambas cosas.

El lado del cliente brinda la capacidad de respuesta que los usuarios esperan y el lado del servidor protege sus datos.

Estoy seguro de que PHP tiene algunas bibliotecas que te podrían ayudar mucho como lo que ASP.NET MVC hace para proporcionar una forma de hacer ambas cosas en un solo paso.

4

La validación de la entrada ciertamente debería ocurrir en el lado del servidor por razones de seguridad.

Sin embargo, para evitar enviar una solicitud al servidor con datos no válidos y enviar la respuesta de vuelta al cliente, también es bueno tener la validación del lado del cliente. Esto hará que su sitio web sea más receptivo. Por lo tanto, agregue la validación del lado del cliente para la facilidad de uso.

0

Validación, ALWAYS server side. Puedo alterar tu forma del lado del cliente y completar valores locos y aún así ser validado. No puedo alterar los scripts del lado del servidor.

Por lo tanto, al revisar el lado del cliente, solo está ahorrando un poco de tiempo 'hablando' con el servidor. Nunca lo use para validar sus datos de manera real.

+2

me hace wounder lo que haces para ganarte la vida;) entiendo lo que dices, es mejor que me asegure de validar todo antes de que el sitio funcione l Ive now then – Shogun

0

Por supuesto que no puede confiar únicamente en JavaScript, ¿y si alguien lo tiene desactivado?JavaScript es solo para hacer que el sitio sea más amigable para el usuario y que no tiene que esperar al servidor cada vez que comete un error. ¡El lado del servidor es para su propio uso para no tener errores en su sistema!

0

Debe validar esto en el lado del servidor. La validación del lado del cliente es opcional. Puede declarar los tipos de validación de los campos y crear un validador genérico para sus formularios. Si no sabe a qué me refiero, intente ver la construcción del código declarativo de AngularJs. Es la mejor forma de crear formularios, también Angular es un marco bueno y muy rápido para construir formularios.

http://angularjs.org/

http://docs.angularjs.org/#!/cookbook/advancedform

mirada en estas líneas:

<input type="text" name="form.address.line1" size="33" ng:required/> <br/> 
    <input type="text" name="form.address.city" size="12" ng:required/>, 
    <input type="text" name="form.address.state" size="2" ng:required ng:validate="regexp:state"/> 
    <input type="text" name="form.address.zip" size="5" ng:required 
    validate="regexp:zip"/> 

Por su lado del servidor también puede definir una estructura, que contendrá los campos del formulario, los métodos de validación y cadena de error de cada campo Luego, en el bucle, valide cada campo en función de su estructura de información. Puede administrar fácilmente los formularios construidos de esa manera.

Ejemplo en PHP:

datos del formulario:

$formData = array (
    array(
    'ID' => "name", 
    'validate' => '/.+/', 
    'label' => 'Your name', 
    'errorMsg' => "This field is required", 
    'type' => 'text' 
    ), 
array(
     'ID' => "Phone number", 
     'validate' => '/^[0-9+ ]+$/', 
     'label' => 'Numer telefonu', 
     'errorMsg' => "Please provide proper telephone number", 
     'type' => 'text' 
     ) 
); 

Validador y generador de la forma (lo siento por código simple y desordenado aquí):

$s = ''; 
foreach ($formData as $input){ 
    $s .= sprintf('<label for="%s">%s</label>',$input['ID'],$input['label']); 
    if (isset($_POST[$input['ID']]) && !empty($input['validate']) && !preg_match($input['validate'],$_POST[$input['ID']])){ 
     $error = true; 
     $s .= sprintf('<div class="formErrorValidate">%s</div>',$input['errorMsg']); 
    } 
    if (isset($_POST[$input['ID']])) $htmlMsg = str_replace('%'.$input['ID'].'%',$_POST[$input['ID']],$htmlMsg); 
    if ($input['type'] == 'textarea'){ 
     $s .= sprintf('<textarea name="%s" id="%s">%s</textarea>',$input['ID'],$input['ID'],(isset($_POST[$input['ID']])?$_POST[$input['ID']]:'')); 
    } else { 
     $s .= sprintf('<input type="%s" name="%s" id="%s" value="%s"/>',$input['type'],$input['ID'],$input['ID'],(isset($_POST[$input['ID']])?$_POST[$input['ID']]:'')); 
    } 

}

+0

Nunca había pensado en hacer esto, parece una forma muy simple de generar y validar un formulario, gracias por la respuesta :) – Shogun

Cuestiones relacionadas