2010-08-20 16 views
8

No entiendo por qué la validación del lado del cliente es un riesgo de seguridad potencial o más un riesgo de seguridad que la validación del lado del servidor? ¿Puede alguien darme algunos escenarios?¿Por qué la validación del lado del cliente es un riesgo de seguridad en comparación con la validación del lado del servidor?

+2

Si la validación es del lado del cliente, entonces no la está validando, el cliente sí lo está. ¿Por qué confiaría en que el cliente valide sus propios datos si la seguridad es una preocupación? – mquander

+0

Duplicados: http://stackoverflow.com/questions/3483514/why-client-side-validation-is-not-enough, http://stackoverflow.com/questions/1125772/should-you-do-validation-on -el lado del servidor – NullUserException

+1

La validación del lado del cliente no es validación, es solo azúcar UI. – seanb

Respuesta

15

Lo ideal sería que hicieras tanto del lado del cliente como del servidor y nunca una u otra. Si tomamos en cuenta estos 3 escenarios, ambos son la única manera segura y fácil de usar para hacerlo:

Lado del cliente solamente: Como se mencionó, no se necesita mucho para evitar estas validaciones si alguien quiere envíe datos mal formados a su servidor (como inyección de SQL). NoScript no ejecutará el código de validación de JavaScript, y algunos navegadores permiten al usuario cambiar activamente todos los javascript y html cargados, de modo que un usuario pueda desenganchar la validación javascript de los controles.

Solo para el lado del servidor: Este es más seguro que el de solo cliente por una posibilidad remota, pero reduce la facilidad de uso. Deben enviar su formulario al servidor, validarlo y recibir la página de error diciendo que un campo en particular no es válido. Lo que es molesto es que si alguno de esos campos son campos de contraseña, sus valores no se vuelven a llenar por defecto. Por ejemplo, digamos que el usuario no ingresó un número de teléfono correctamente en un formulario de creación de cuenta. Cuando el servidor regrese la página acerca de cómo el número de teléfono es incorrecto, el usuario verá eso, corrige el número de teléfono y presiona enviar de nuevo, solo para recibir otra página de error acerca de no haber ingresado una contraseña (y volver a ingresarla en el segundo cuadro de texto) aunque ese no era el problema inicial.

Lado del cliente y del servidor: Obtiene la seguridad de la validación del lado del servidor, algo con lo que el usuario tendrá dificultades para interferir, y la facilidad de uso de la validación de entrada sin tener que enviar la página (validación puramente javascript local o AJAX).

Si tuviera que elegir una, el lado del servidor sería el camino a seguir. Pero nunca deberías tener que elegir uno o el otro.

+0

Gracias por la explicación, tiene mucho más sentido ahora. – Xaisoft

+0

Era una pregunta que tenía de regreso a la escuela cuando comencé a aprender tecnologías del lado del servidor. Se trata de la gran imagen de las cosas. –

4

Si realiza la validación solo en el lado del cliente, alguien puede deshabilitar javascript (o cambiar el código js, ​​con firebug, por ejemplo). Por lo tanto, todas las validaciones realizadas en js serían inútiles y el usuario puede insertar datos no válidos en su sistema.

2

Supongo que estás hablando de un escenario web?

Si está realizando una validación del lado del cliente con Javascript, ¿qué ocurre si el usuario tiene el Javascript deshabilitado? Luego pueden enviar datos al servidor que no ha sido validado.

Si fueran furtivos, incluso podrían publicar datos directamente en su servidor (evitando su página por completo).

Si realiza la validación del lado del servidor, además de o en lugar de la validación del lado del cliente, entonces tiene la oportunidad adicional de defenderse contra estos escenarios.

8

Usando varias herramientas, como Fiddler, Noscript, Web Developer, etc., podría desactivar la validación javascript del lado del cliente y modificar los datos que se envían a su servidor. Dependiendo del tipo de datos y de lo que el servidor haga con ellos, uno podría iniciar un ataque de inyección SQL, intentar comprometer la seguridad del servidor o simplemente almacenar datos falsos.

Un ejemplo ligero: supongamos que tiene una validación del lado del cliente para asegurarse de que el código postal sea de 5 dígitos o 5 + 4 dígitos. Si deshabilito el script del lado del cliente, podría dejar mi valor de 24 dígitos en su lugar. Si su servidor no comprueba más el valor, y la base de datos puede almacenar los 24 dígitos, entonces he guardado los datos falsos.

+0

Gracias por contarme sobre estas herramientas. – Xaisoft

0

En realidad, hay una gran ventaja de seguridad para la validación del lado del cliente (en combinación con la validación del lado del servidor). Si valida cuidadosamente en el cliente, entonces TODO el tráfico que entra al servidor debe estar limpio. Excepto por los atacantes. Eso hace que sea posible hacer una detección de ataque del lado del servidor mucho mejor. En el gran esquema de cosas, eso es probablemente lo más importante que podrías hacer para proteger tus aplicaciones. Consulte el Detector de intrusiones de ESAPI de OWASP o el AppSensor de OWASP para obtener más información al respecto.

Ah, y obviamente si el ataque comienza y termina en el cliente, como XSS basado en DOM, entonces tendrá que validar y codificar en el lado del cliente.

+1

Veo su punto, pero probablemente deba dejar en claro que está argumentando para la validación del lado del cliente * además de * la validación del lado del servidor. –

+0

Gracias, actualizado. –

Cuestiones relacionadas