Como otros han dicho, debes hacer ambas cosas. Este es el por qué:
Lado del cliente
Desea validar la entrada en el lado del cliente primero porque puede dar una mejor retroalimentación al usuario promedio . Por ejemplo, si ingresan una dirección de correo electrónico no válida y se mueven al siguiente campo, puede mostrar un mensaje de error de inmediato. De esa forma, el usuario puede corregir cada campo antes de enviar el formulario.
Si solo valida en el servidor, tienen que enviar el formulario, recibir un mensaje de error e intentar localizar el problema.
(Este problema puede aliviarse 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 malintencionado , que puede omitir fácilmente su JavaScript y enviar información peligrosa al servidor.
Es muy peligroso confiar en tu interfaz de usuario. No solo pueden abusar de su interfaz de usuario, sino que pueden no estar utilizando su interfaz de usuario en absoluto, o incluso un navegador . ¿Qué sucede si el usuario edita manualmente la URL, o ejecuta su propio Javascript, o ajusta sus solicitudes HTTP con otra herramienta? ¿Qué sucede si envían solicitudes HTTP personalizadas desde curl
o desde un script, por ejemplo?
( Esto no es teórico; por ejemplo, trabajé en un motor de búsqueda de viajes que volvió 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 llenado el formulario de búsqueda de cada compañía, luego reunido y ordenado todos los resultados. El formulario JS de esas compañías nunca se ejecutó, y fue crucial para nosotros que proporcionaran mensajes de error en el HTML devuelto. Por supuesto, una API hubiera sido agradable, 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: se debe permitir que un cliente envíe HTTP por cualquier medio que desee, y usted debe responder correctamente. Eso incluye validación.
La validación del lado del servidor también es importante para la compatibilidad : no todos los usuarios, incluso si están usando un navegador, tendrán habilitado JavaScript.
Anexo - Diciembre de 2016
Hay algunas validaciones que ni siquiera se pueden hacer correctamente en el código de aplicación del lado del servidor, y son completamente imposibles 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 aún 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 datos relacionados. Los desarrolladores regularmente arruinan esto , pero PostgreSQL proporciona algunas buenas soluciones .