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?
Respuesta
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.
Gracias por la explicación, tiene mucho más sentido ahora. – Xaisoft
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. –
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.
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.
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.
Gracias por contarme sobre estas herramientas. – Xaisoft
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.
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. –
Gracias, actualizado. –
- 1. DDD y validación del lado del cliente
- 2. ASP.NET Validación lado del servidor
- 3. Validación del lado del cliente de Grails
- 4. Integrar Validación del lado del cliente
- 5. Validación del lado del cliente ASP.NET MVC
- 6. AngularJS: la integración con la validación del lado del servidor
- 7. Validación del lado del cliente de FluentValidation
- 8. Validación de entrada de usuario, del lado del cliente o del lado del servidor? [PHP/JS]
- 9. ASP.NET validador propio lado del cliente y la validación del lado del servidor no disparar
- 10. Crear validación combinada del lado del cliente y del lado del servidor en Symfony2
- 11. ¿Cómo usar las reglas de validación tanto del lado del cliente como del lado del servidor?
- 12. ¿Por qué necesitamos la validación del lado del servidor y del lado del cliente para las aplicaciones web?
- 13. RegisterOnSubmitStatement después de la validación del lado del cliente
- 14. Validación del lado del servidor con Custom DataAnnotationsModelValidatorProvider
- 15. MVC2 Validación del lado del cliente para un DateTime?
- 16. Método del lado del servidor y del lado del cliente
- 17. Validación de datos del lado del servidor en Express + node.js
- 18. IValidatableObject en MVC3 - validación del lado del cliente
- 19. Ruby: del lado del cliente o del lado del servidor?
- 20. ASP.Net MVC 3 Modelo JSON Enlace y validación del modelo del lado del servidor mezclado con la validación del lado del cliente
- 21. Web Charting, lado del servidor o del lado del cliente?
- 22. mvc validación del lado del cliente para propiedades anidadas (recopilación)
- 23. MVC3 Validación del lado del cliente errática/inconsistente
- 24. MVC3 Validación del lado del cliente no funciona
- 25. Validación del lado del cliente de las tarjetas de crédito
- 26. Replicar validación del lado del servidor C# en Javascript
- 27. ¿Qué tan rápido es javascript del lado del cliente contra Java del lado del servidor?
- 28. Formulario de validación del lado del servidor Angular.js
- 29. librería javascript para el almacenamiento del lado del cliente con la sincronización del lado del servidor
- 30. Paginación: ¿lado del servidor o lado del cliente?
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
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
La validación del lado del cliente no es validación, es solo azúcar UI. – seanb