¿Por qué la validación del lado del cliente no es suficiente?

Vi aquí que:

Como probablemente ya sepa, confiar solo en la validación del lado del cliente es una muy mala idea. Siempre realice la validación apropiada del lado del servidor también.

¿Podría explicar por qué la validación del lado del servidor es una necesidad?

La validación del lado del cliente – supongo que usted está hablando de páginas web aquí – se basa en JavaScript .

La validación con JavaScript puede desactivarse en el navegador del usuario, fallar debido a un error de scripting o ser eludido maliciosamente sin mucho esfuerzo.

Además, todo el proceso de envío de formularios puede ser falso.

Por lo tanto, nunca hay una garantía de que lo que llegue al lado del servidor sea información limpia y segura.

Hay una regla simple al escribir la aplicación del servidor: Nunca confíe en los datos del usuario.

Siempre debe suponer que un usuario malintencionado accede a su servidor de una forma que no pretendía (por ejemplo, en este caso mediante una consulta manual mediante curl lugar de la página web deseada). Por ejemplo, si su página web intenta filtrar comandos SQL, un atacante ya tiene una buena pista de que podría ser un buen vector de ataque para pasar la entrada con comandos SQL.

cualquiera que conozca javascript básico puede moverse por el lado del cliente.

el lado del cliente solo se utiliza para mejorar la experiencia del usuario (no es necesario volver a cargar la página para validar)

El cliente con el que está hablando puede no ser el cliente con el que cree que está hablando, por lo que puede estar ignorando cualquier validación que le pida que haga.

En el contexto web, no solo es posible que un usuario tenga javascript desactivado en su navegador, sino que también existe la posibilidad de que no estés hablando con un navegador en absoluto; podrías recibir un formulario de un bot que está PUBLICANDO a su URL de envío sin haber visto el formulario en absoluto.

En el contexto más amplio, podría tratarse con un cliente pirateado que está enviando datos que el cliente real nunca usaría (por ejemplo, bots de objective para juegos FPS) o posiblemente incluso un cliente completamente personalizado creado por alguien que realizó ingeniería inversa de su protocolo de conexión. que no sabe nada sobre cualquier validación que esperas que realice.

Sin ser específico para los clientes web y de JavaScript, y para abordar el problema más ampliamente, el servidor debería ser responsable de mantener sus propios datos (junto con las bases de datos subyacentes).

En un entorno cliente-servidor, el servidor debe estar preparado para el hecho de que muchas implementaciones de cliente diferentes podrían estar hablando con él. Considere un sistema de entrada comercial. Los clientes pueden ser GUI (p. Ej., Sistemas de entrada de comercio) y (por ejemplo) clientes de carga de datos (cargando múltiples transacciones desde archivos .csv).

La validación del cliente se puede realizar de muchas maneras diferentes, y no todas correctamente. En consecuencia, el servidor no debería necesariamente confiar en los datos del cliente y realizar comprobaciones de integridad y validación por sí mismo.

En caso de que los atacantes publiquen su propia forma.

Puedes desactivar / editar JavaScript.

Debido a que el agente de usuario (por ejemplo, el navegador) podría ser falso. Es muy fácil crear una aplicación personalizada para crear una solicitud HTTP con encabezados y contenido arbitrarios. Incluso puede decir que es un navegador real: no tienes manera de ver la diferencia.

Todo lo que puede hacer es mirar el contenido de la solicitud, y si no la revisa, no sabe si es válida.

La validación del lado del servidor es imprescindible porque la validación del lado del cliente no garantiza que los datos no validados lleguen al servidor.

La validación del lado del cliente no es suficiente porque su ámbito de acción es muy restringido. La validación se realiza únicamente en la interfaz de usuario del navegador.

Un servidor web “escucha” y recibe una solicitud HTTP que contiene datos del navegador y luego la procesa.

Un usuario malintencionado puede enviar solicitudes HTTP maliciosas de muchas maneras. Un navegador ni siquiera es necesario.

La validación del lado del cliente, realizada mediante JavaScript, en el navegador, es una mejora importante de la usabilidad y la interfaz de usuario. Pero no evita que los datos malintencionados sean enviados por un usuario que sepa cómo eludir el comportamiento predeterminado del navegador al generar la solicitud HTTP que se enviará al servidor. Esto se puede hacer fácilmente con algunos complementos del navegador, usando cURL, etc.

En general, es mejor que CADA pieza de una aplicación haga sus propias comprobaciones / verificaciones.

Los controles del lado del cliente son buenos para maximizar la experiencia del usuario y acelerar la retroalimentación al cliente de que necesitan arreglar algo, y para reducir la cantidad de problemas encontrados en las comprobaciones del lado del servidor.

Luego, en cada punto importante de transición en el código del lado del servidor, también debe tener controles allí. Verifique las entradas dentro del código de la aplicación, preferiblemente a través de la validación de la entrada de la lista blanca , y luego tenga interacciones con la base de datos para usar consultas parametrizadas para garantizar que los problemas no ocurran.

Debe realizar la validación del lado del servidor en cualquier dato que, de no ser válido, podría ser perjudicial para cualquier persona que no sea la entidad que publica los datos. La validación del lado del cliente puede ser adecuada en los casos en que los datos no válidos no tendrán efectos negativos para nadie que no sea la entidad que lo publica. A menos que pueda estar seguro de que los efectos nocivos de los datos incorrectos no se extenderán más allá de la entidad que los publica, debe usar la validación del lado del servidor para protegerse contra vándalos u otros clientes deshonestos.

La validación del lado del cliente es para evitar que el cliente ingrese datos incorrectos. La validación del lado del servidor es para evitar que el servidor procese datos incorrectos. En el proceso, también introduce algo de seguridad en el proceso de envío.

Las validaciones del lado del cliente presuponen un navegador seguro, un lenguaje del lado del cliente o HTML 5. Todos estos elementos podrían ser deshabilitados, parcialmente inutilizables o simplemente no implementados. Su sitio web debe ser utilizado por todas las personas, con cada navegador. Los idiomas del lado del servidor son más seguros y, si no son errores, la validación seguramente será más segura y correcta.

Amigo, supongamos que si una persona desactiva el javascript en su navegador, la validación se agota. Luego, si publica contenido malicioso a través de ese formulario en el lado del servidor. Llevará a vulnerabilidades graves como la inyección SQL o xss o cualquier otro tipo de problema. Así que ten cuidado si vas a implementar una validación de JavaScript del lado del cliente.

Gracias