JavaScript: validación del lado del cliente frente al lado del servidor

1 minuto de lectura

JavaScript validacion del lado del cliente frente al lado del
brad8118

¿Qué es mejor hacer la validación del lado del cliente o del lado del servidor?

En nuestra situación estamos usando

  • jQuery y MVC.
  • Datos JSON para pasar entre nuestra Vista y Controlador.

Gran parte de la validación que hago es validar los datos a medida que los usuarios los ingresan. Por ejemplo yo uso el keypress evento para evitar letras en un cuadro de texto, establecer un número máximo de caracteres y que un número esté dentro de un rango.

Supongo que la mejor pregunta sería: ¿Hay algún beneficio en hacer la validación del lado del servidor sobre el lado del cliente?


Impresionantes respuestas a todos. El sitio web que tenemos está protegido con contraseña y para una pequeña base de usuarios (<50). Si no ejecutan JavaScript, enviaremos ninjas. Pero si estuviéramos diseñando un sitio para todos, aceptaría hacer la validación en ambos lados.

  • javascript se puede deshabilitar

    – Enrico Murrú

    2 de octubre de 2008 a las 13:10

  • No existe una forma segura de bloquear a los usuarios que deshabilitan JavaScript. Si el usuario llega a su página con JS habilitado y luego lo desactiva, no hay nada que pueda hacer. (Está bien, podría usar JS para implementar el control de envío, de modo que deje de funcionar en este escenario, pero esto se puede omitir como todo lo demás).

    – Estuardo

    15 de noviembre de 2019 a las 10:14


JavaScript validacion del lado del cliente frente al lado del
nathan largo

Como han dicho otros, deberías hacer ambas cosas. Este es el por qué:

Lado del cliente

Primero desea validar la entrada en el lado del cliente porque puede dar mejores comentarios para el usuario promedio. Por ejemplo, si ingresan una dirección de correo electrónico no válida y pasan al siguiente campo, puede mostrar un mensaje de error de inmediato. De esa manera el usuario puede corregir todos los campos. antes de envían el formulario.

Si solo valida en el servidor, tienen que enviar el formulario, obtener un mensaje de error e intentar localizar el problema.

(Este problema se puede aliviar haciendo que el servidor vuelva a procesar el formulario con la entrada original del usuario completada, pero la validación del lado del cliente es aún más rápida).

Lado del servidor

Desea validar en el lado del servidor porque puede proteger contra el usuario maliciosoque puede omitir fácilmente su JavaScript y enviar información peligrosa al servidor.

Es muy peligroso confiar en su interfaz de usuario. No solo pueden abusar de su interfaz de usuario, sino que es posible que no usen su interfaz de usuario en absoluto, o incluso un navegador. ¿Qué sucede si el usuario edita manualmente la URL, ejecuta su propio Javascript o modifica sus solicitudes HTTP con otra herramienta? ¿Qué sucede si envían solicitudes HTTP personalizadas desde curl o de un script, por ejemplo?

(Esto no es teórico; por ejemplo, trabajé en un motor de búsqueda de viajes que volvía a enviar la búsqueda del usuario a muchas aerolíneas asociadas, compañías de autobuses, etc., enviando POST solicitudes como si el usuario hubiera rellenado el formulario de búsqueda de cada empresa y luego recopilado y ordenado todos los resultados. El formulario JS de esas empresas nunca se ejecutó, y era crucial para nosotros que proporcionaran mensajes de error en el HTML devuelto. Por supuesto, una API hubiera estado bien, pero esto era lo que teníamos que hacer.)

No permitir eso no solo es ingenuo desde el punto de vista de la seguridad, sino también no estándar: un cliente debe poder enviar HTTP por cualquier medio que desee, y usted debe responder correctamente. Eso incluye la validación.

La validación del lado del servidor también es importante para compatibilidad – no todos los usuarios, incluso si usan un navegador, tendrán habilitado JavaScript.

Anexo – Diciembre 2016

Hay algunas validaciones que ni siquiera se puede hacer correctamente en el código de la aplicación del lado del servidor, y es completamente imposible en el código del lado del cliente, porque dependen del estado actual de la base de datos. Por ejemplo, “nadie más ha registrado ese nombre de usuario”, o “la publicación de blog que está comentando todavía existe”, o “ninguna reserva existente se superpone a las fechas que solicitó”, o “el saldo de su cuenta todavía tiene suficiente para cubrir esa compra .” Solo la base de datos puede validar de manera confiable los datos que dependen de los datos relacionados. Desarrolladores regularmente arruina estopero PostgreSQL proporciona algunas buenas soluciones.

  • @kidmosey “es una violación obvia de los principios DRY” Sí, lo que significa dolor para los programadores como nosotros. Pero imagina un formulario de registro. Si duplicar el conocimiento “una dirección de correo electrónico debe contener una @” en el código del cliente significa que los usuarios obtienen comentarios más rápido y más de ellos se registran, lo que resulta en ingresos adicionales de $ 100k por año, paga con creces los costos de mantenimiento adicionales. DRY es un muy buen principio, pero no es la única consideración. La calidad del código realmente se mide en qué tan bien sirve a los usuarios y a una organización en un análisis de costo/beneficio.

    – Nathan largo

    06/10/2017 a las 14:27


  • @ArunRaaj Sí, y detectará la mayoría de los problemas de esa manera, pero no es 100% confiable. Si dos usuarios están completando el formulario al mismo tiempo, se les puede decir a ambos que user1 es un nombre de usuario disponible. Cuando se envíen, ambos obtendrán el mismo nombre de usuario a menos que vuelva a verificar el lado del servidor. E incluso una verificación en el código de la aplicación del servidor puede tener el mismo problema: entran dos solicitudes, la primera verifica la base de datos y se le dice OK, la segunda verifica la base de datos y se le dice OK, la primera se guarda, la segunda se guarda como un duplicado. Solo una restricción única de db garantiza la unicidad.

    – Nathan largo

    30 de marzo de 2018 a las 15:13

  • Nathan, acabo de leer tus ediciones de 2016. Y con razón ha señalado que las validaciones se deben realizar desde la base de datos. pero sabe que la validación de la base de datos en realidad se encuentra bajo la validación del lado del servidor donde verifica el nombre de usuario si está disponible o no.

    – KMX

    12 de abril de 2018 a las 6:39

  • Las validaciones de @NathanLong en datos sensibles a las condiciones de carrera no son tan intratables como suena esta oración. Es una molestia hacerlo correctamente, pero cree un mecanismo de reserva que use un recurso sincronizado para solicitar. Entonces, si el usuario escribe “nombre de usuario A”, una verificación de unicidad en el servidor que no permite múltiples llamadas simultáneas para verificar si es único; si es único, también resérvelo con un token temporal asignado al cliente que también se libera si el mismo ID de sesión prueba un nombre de usuario diferente. El token debe caducar después de un tiempo razonable. Ejemplo: reserva de asiento de TicketMaster.

    – Elascanador

    2 de agosto de 2018 a las 18:41


  • @KMX Estaba tratando de distinguir algo confiable como una restricción única de db de algo no confiable, como hacer que el código de la aplicación del lado del servidor haga un SELECT seguido de un INSERTlo que significa que existe la posibilidad de que otro INSERT se hizo en el medio. Bloquear la tabla evitaría eso, pero una restricción única es mucho mejor.

    – Nathan largo

    02/08/2018 a las 19:00

Sí, la validación del lado del cliente se puede omitir por completo, siempre. Debe hacer ambas cosas, del lado del cliente para brindar una mejor experiencia de usuario, y del lado del servidor para asegurarse de que la entrada que obtiene esté realmente validada y no solo supuestamente validada por el cliente.

Solo lo voy a repetir, porque es bastante importante:

Validar siempre en el servidor

y agregue JavaScript para la capacidad de respuesta del usuario.

El beneficio de hacer la validación del lado del servidor sobre la validación del lado del cliente es que la validación del lado del cliente se puede omitir/manipular:

  • El usuario final podría tener javascript desactivado
  • Los datos pueden ser enviados directamente a su servidor por alguien que ni siquiera está usando su sitio, con una aplicación personalizada diseñada para hacerlo.
  • Un error de Javascript en su página (causado por cualquier número de cosas) podría resultar en la ejecución de algunas, pero no todas, de su validación

En resumen, siempre, siempre valide del lado del servidor y luego considere la validación del lado del cliente como un “extra” adicional para mejorar la experiencia del usuario final.

debe siempre validar en el servidor.

También tener validación en el cliente es bueno para los usuarios, pero es completamente inseguro.

JavaScript validacion del lado del cliente frente al lado del
Comunidad

Bueno, todavía encuentro algo de espacio para responder.

Además de las respuestas de Rob y Nathan, agregaría que es importante tener validaciones del lado del cliente. Cuando esté aplicando validaciones en sus formularios web, debe seguir estas pautas:

Lado del cliente

  1. Debe usar validaciones del lado del cliente para filtrar solicitudes genuinas provenientes de usuarios genuinos en su sitio web.
  2. La validación del lado del cliente debe usarse para reducir los errores que pueden ocurrir durante el procesamiento del lado del servidor.
  3. La validación del lado del cliente debe usarse para minimizar los viajes de ida y vuelta del lado del servidor para que ahorre ancho de banda y las solicitudes por usuario.

Lado del servidor

  1. NO DEBE asumir que la validación realizada con éxito en el lado del cliente es 100% perfecta. No importa aunque sirva a menos de 50 usuarios. Nunca se sabe cuál de sus usuarios/empleados se convierte en un “mal” y realiza alguna actividad dañina sabiendo que no tiene las validaciones adecuadas.
  2. Incluso si es perfecto en términos de validación de direcciones de correo electrónico, números de teléfono o verificación de algunas entradas válidas, puede contener datos muy dañinos. Que debe filtrarse en el lado del servidor, sin importar si es correcto o incorrecto.
  3. Si se omite la validación del lado del cliente, las validaciones del lado del servidor vienen a rescatarlo de cualquier daño potencial a su procesamiento del lado del servidor. En los últimos tiempos, ya hemos escuchado muchas historias de inyecciones de SQL y otro tipo de técnicas que podrían aplicarse para obtener algunos beneficios malignos.

Ambos tipos de validaciones juegan un papel importante en su ámbito respectivo, pero el más sólido es el del lado del servidor. Si recibe 10k usuarios en un solo momento, definitivamente terminará filtrando la cantidad de solicitudes que llegan a su servidor web. Si encuentra que hubo un solo error, como una dirección de correo electrónico no válida, vuelven a publicar el formulario y le piden a su usuario que lo corrija, lo que definitivamente consumirá los recursos y el ancho de banda de su servidor. Así que mejor aplica la validación de javascript. Si javascript está deshabilitado, la validación del lado del servidor vendrá al rescate y apuesto a que solo unos pocos usuarios podrían haberlo deshabilitado accidentalmente, ya que el 99.99% de los sitios web usan javascript y ya está habilitado de forma predeterminada en todos los navegadores modernos.

1646962273 17 JavaScript validacion del lado del cliente frente al lado del
jonathan

Puede realizar la validación del lado del servidor y enviar un objeto JSON con los resultados de la validación para cada campo, manteniendo el Javascript del cliente al mínimo (solo mostrando los resultados) y aún así tener una experiencia fácil de usar sin tener que repetirse tanto en el cliente como en el servidor.

  • ¿Fácil de usar? Quizás. ¿Casi instantáneo y suave como la mantequilla? Probablemente no.

    – cuádruple vuelta

    13 de febrero de 2017 a las 13:20

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad