Je ne comprends pas bien pourquoi la validation du côté du client est un risque de sécurité potentiel ou plus d'un risque de sécurité que la validation du côté serveur? Quelqu'un peut-il me donner des scénarios? P>
5 Réponses :
Si vous validez uniquement le côté client, une personne peut désactiver JavaScript (ou modifier le code JS, avec Firebug, par exemple). Ainsi, toutes les validations effectuées dans JS seraient inutiles et l'utilisateur peut insérer des données non valides dans votre système. P>
Je suppose que vous parlez d'un scénario Web? p>
Si vous faites la validation du côté client avec JavaScript, que se passe-t-il si l'utilisateur a désactivé JavaScript? Ensuite, ils peuvent soumettre des données au serveur qui n'a pas été validée. P>
S'ils étaient sournois, ils pouvaient même publier des données directement sur votre serveur (contourner complètement votre page). P>
Si vous effectuez une validation du côté serveur, en plus de ou au lieu de la validation du côté client, vous avez une occasion supplémentaire de défendre ces scénarios. P>
Utilisation de divers outils, tels que Fiddler , NOSSOCTRESCRIVER , Développeur Web < / a>, etc., je pourrais désactiver la validation JavaScript côté client et modifier les données envoyées à votre serveur. En fonction du type de données et de ce que le serveur fait avec lui, on pourrait initier une attaque d'injection SQL, tenter de compromettre la sécurité du serveur, ou de stocker simplement des données FONGUS. P>
Un exemple léger: dites que vous avez une validation côté client pour vous assurer qu'un code postal est de 5 chiffres ou 5 + 4 chiffres. Si je désactive le script côté client, je pourrais laisser ma valeur à 24 chiffres en place. Si votre serveur ne vérifie pas plus avant la valeur et que la base de données est capable de stocker tous les 24 chiffres, j'ai enregistré les données FONGUS. P>
Merci de me parler de ces outils.
Idéalement, vous feriez le côté client et le serveur et jamais l'un ou l'autre. Si nous prenons au regard de ces 3 scénarios, les deux sont le seul moyen sécurisé et convivial de le faire: P>
côté client uniquement: comme mentionné, cela ne prend pas grand chose pour contourner ces validations si quelqu'un veut envoyer des données malformées à votre serveur (telles que l'injection SQL). Noscript n'exécutera pas le code de validation JavaScript, et certains navigateurs permettent à l'utilisateur de modifier activement tous les fichiers JavaScript et HTML chargé, un utilisateur pourrait donc décrocher la validation JavaScript dans les commandes. P>
côté serveur uniquement: celui-ci est plus sécurisé que le client uniquement par un coup long, mais réduit la convivialité de l'utilisateur. Ils doivent envoyer leur forme au serveur, le faire valider et recevoir la page d'erreur en disant qu'un champ particulier n'était pas valide. Ce qui est ennuyeux, c'est que si l'un de ces champs était des champs de mot de passe, leurs valeurs ne sont pas repeuplées par défaut. Par exemple, disons que l'utilisateur n'a pas saisi de numéro de téléphone correctement dans un formulaire de création de compte. Lorsque le serveur crache la page de la manière dont le numéro de téléphone est faux, l'utilisateur le verra, corrigez le numéro de téléphone et appuyez à nouveau sur Soumettre, juste pour recevoir une autre page d'erreur de ne pas avoir entré à un mot de passe (et entrez-la à nouveau. Boîte de texte) Même si ce n'était pas le problème initial. P>
Côté client et serveur: vous obtenez la sécurité de la validation du côté serveur, quelque chose que l'utilisateur sera pressé pour interférer avec et la convivialité de la validation de l'utilisateur sans avoir à soumettre la page (si vous validez via purement local JavaScript ou Ajax). P>
Si vous avez absolument dû choisir un, le côté serveur serait la voie à suivre. Mais vous ne devriez jamais avoir à choisir l'un ou l'autre. P>
Merci pour l'explication, cela rend beaucoup plus de sens maintenant.
C'était une question que j'avais de retour à l'école lorsque j'ai commencé à apprendre des technologies latérales du serveur. Tout est sur la grande image des choses.
En réalité, il existe un énorme avantage de sécurité à la validation du côté client (en combinaison avec la validation du côté serveur). Si vous validez attentivement sur le client, tout le trafic entrant dans le serveur doit être propre. Sauf pour les attaquants. Cela permet de faire une meilleure détection d'attaque côté serveur. Dans le grand schéma des choses, c'est probablement la chose la plus importante que vous puissiez faire pour protéger vos applications. Voir l'intrusion de l'intrusion d'Owasp ESAPI ou de l'Appsensor Owasp pour plus d'informations. P>
OH, et évidemment si l'attaque commence et finit dans le client, comme des XSS de DOM, vous devrez alors devoir valider et encoder du côté client. P>
Je vois votre point de vue, mais vous devriez probablement préciser que vous discutez de la validation du côté client en plus de la validation du côté serveur i>.
Si la validation est du côté client, vous ne la validez pas, le client est. Pourquoi voudriez-vous faire confiance au client pour valider leurs propres données si la sécurité est une préoccupation?
DUPLICATES: Stackoverflow.com/questions / 3483514 / ... , Stackoverflow.com/questions/1125772/...
La validation du côté client n'est pas une validation - il s'agit juste de sucre d'UI.