Es un principio importante, pero no el único.
Digamos que está escribiendo un procesador de pagos, específicamente funciones para enviar dinero. El código de back-end esperaría ciertos parámetros para una transacción, tal vez el número de cuenta de origen (almacenado en un campo html oculto), el número de cuenta de destino y un monto en dólares. Cuando se llama a esta función, arroja el número de cuenta a una consulta SQL para obtener los detalles de la cuenta. La información de la cuenta de esta búsqueda se envía de vuelta al navegador en una página de confirmación.
¿Dónde puede la entrada del usuario causar problemas aquí? En primer lugar, ¿qué sucede si el usuario ingresa un monto negativo en dólares? ¿Qué sucede si el usuario cambia el campo oculto a un número de cuenta que no es el suyo? ¿Qué sucede si el campo del número de cuenta contiene escapes y comandos SQL (inyección SQL) o código JavaScipt (XSS)? Este es un escenario muy simple, pero hay muchas cosas que pueden salir mal. Demasiada confianza en el usuario puede permitir eludir la lógica de negocios prevista o los controles de acceso, así como la exposición a vulnerabilidades de inyección.
Nunca confíes en el usuario; no hay nada en el lado del cliente que pueda evitar que ingresen información inesperada y peligrosa. Valide siempre la entrada y realice verificaciones del lado del servidor en todo.