Il existe plusieurs points de vue :
Exemple inspiré par commentcamarche.net
Vous rentrez votre login, vos infos seront ensuite affichées, car récupérées au moyen de la requête :SELECT * FROM utilisateurs WHERE login="$login";
Petit malin, au lieu de taper votre login, vous entrez : «toto"; DROP TABLE *;CREATE TABLE gagne(coucou VARCHAR(10);SELECT * FROM gagne WHERE coucou="n»
Et bien sachez que vous allez effacer toutes les tables de la base et créer la vôtre qui s'appellera "gagne".
La requête se sera transformée en :
SELECT * FROM utilisateurs WHERE login="toto"; DROP TABLE *;CREATE TABLE gagne(coucou VARCHAR(10);SELECT * FROM gagne WHERE coucou="n";
Bon, celà sous certaines conditions assez restricitives j'en conviens... Mais c'est un exemple ! Il faut ainsi que magic_quotes (PHP) soit désactivé sur le serveur, ou que le concepteur ai annulé son action...
Tout simplement parce que cette méthode peut faire gagner de la bande passante à l'utilisateur mais aussi et surtout au serveur. Les vérifications sont faites en local, et le formulaire envoyé une fois que tous les champs sont correctements remplis.
Parce que justement celà se fait côté client ! Comment pouvez vous controler que les vérifications ont bien été faites ? Et si l'utilisateur désactive javascript ? Et si un hacker vous envoie un formulaire à sa sauce sans passer par votre page ?
En ce qui concerne la sécurité, toutes les vérifications doivent se faire côté serveur, avec php par exemple. Et en fin de compte, il faut quand même tout vérifier sur le serveur. Mais pour le confort des utilisateurs lambda, on peut aussi vérifier les entrées de formulaires en javascript, ce qui évite des redirections à chaque erreur...