Suis-je sous risque d'attaques CSRF dans un formulaire POST qui ne nécessite pas que l'utilisateur soit connecté?
Je suis probablement un total noob ici, mais je suis encore incertain sur ce qu'est une CSRF (Cross-Site Request Forgery) attaque est exactement. Donc permet de regarder les trois situations...
1) j'ai un formulaire POST que j'utilise pour modifier les données de mon site. Je veux que ces données soient modifiées seulement par les utilisateurs qui sont connectés.
2) j'ai un site, qui peut être utilisé par les utilisateurs qui sont enregistrés en tant que bien que les invités. Certaines parties du site sont pour les utilisateurs enregistrés seulement, mais il y a aussi la POSTE des formulaires qui peuvent être utilisés par tous les utilisateurs anonymes et non (par exemple un formulaire de contact standard). Si le formulaire de contact, être protégés contre les attaques de type CSRF?
3) j'ai un site qui ne dispose pas d'un système d'authentification à tous (enfin, c'est peut-être irréaliste, donc permet de dire qu'il a un admin du site qui est séparé du reste de celle-ci et la partie admin est bien protégés). La partie principale du site n'est utilisé que par des utilisateurs anonymes. Faire de la POSTE des formulaires sur ce besoin d'être protégés?
Dans le cas 1), la réponse est clairement oui. Mais dans le cas de 2 et 3 je ne sais pas (et c'est la différence entre 2 et 3 même importante?).
OriginalL'auteur Monika Sulik | 2010-03-07
Vous devez vous connecter pour publier un commentaire.
Il y a moyen de CSRF chaque fois que malveillant HTML ou JavaScript qui est ciblée sur votre site web est intégré dans un autre page HTML (ou un courriel), qui est été exécutée avec succès.
Un exemple est le suivant, qui est été placé dans une autre page web qui innocemment vous demande votre nom et votre âge avant de poursuivre:
Noter que les points d'action à votre site web et caché entrées contient le nécessaire de publier de l'information. Cet exemple va essayer de transfert d'un fonds de 1000 (quelle qu'en soit la devise) numéro de compte 12345678. Si vous avez besoin d'une connexion sur votre forme et aussi fait des vérifications sur cela, alors, le ci-dessus ne sera évidemment que exécutée avec succès, si l'ignorant utilisateur a récemment enregistré dans votre site web, mais pas déconnecté encore, ou si la session n'est pas encore expiré.
Pour empêcher que cela se produise, votre meilleur pari est d'ajouter une demande de jeton pour le formulaire et de le valider dans le côté serveur. I. e. générer un long, unique et impossible à deviner chaîne aléatoire vous permet de stocker dans la session et incorporer en tant que
<input type="hidden">
élément de la forme. Lorsque le formulaire est soumis, comparez les soumis jeton de valeur avec celle déjà en cours (et de retirer immédiatement l'un dans la session). Pour aller plus loin, faire usage d'un CAPTCHA.Dans votre cas particulier, je pense que vous êtes en fait plus se soucier de XSS, qui est le contraire de l'un de CSRF, mais qui, à son tour, peut également être une source de CSRF. Un exemple de script de site à site, c'est quand l'utilisateur saisit les éléments suivants dans un champ de saisie qui va être réaffiché tôt ou plus tard sur le même site:
Chaque fois que vous -comme étant l'administrateur - vues de la page avec le commentaire avec le (invisible!) formulaire et le script à l'intérieur, alors il sera exécutée avec succès.
Prévenir les attaques de type XSS est en fait assez facile. HTML-escape tout contrôlé par l'utilisateur d'entrée (c'est à dire la demande d'URL, en-têtes de requête, les paramètres de la demande et du corps de la requête) avant de les afficher sur la page web. En PHP, vous pouvez utiliser
htmlspecialchars()
pour cela, et en Java/JSP la JSTLfn:escapeXml()
. De cette façon, en vertu de chacun des<
seront convertis en<
et>
à>
qui fera que toutes les entrées en HTML/JS sera affiché tel quel et ne peut donc pas être exécuté.Une demande de jeton et/ou un captcha est la meilleure approche. Il est difficile de savoir ce que votre webapp langage de programmation. J'ai vérifié votre question de l'histoire et j'imagine que vous ciblez sur Python. Vous pouvez ensuite trouver captchas.net utile. Le site contient un exemple Python.
Merci, grande réponses 🙂 je pense que je sais plus ou moins comment implémenter cela dans ma technologie de choix (le framework Django). A juste pas clair sur la nature de l'attaque elle-même.
Vous êtes les bienvenus. Pour Django, vous pouvez trouver ce lien utile: google.com/search?q=django+captcha
moyens de CSRF chaque fois que malveillant HTML ou JavaScript qui est ciblé sur votre site web est intégré dans une autre page HTML (ou un courriel), qui est été exécutée avec succès." De sorte que l'autre page html doit être dans le même domaine de la cible de site web ? Aussi pouvez-vous expliquer "f vous avez besoin d'une connexion sur votre forme et aussi fait des vérifications sur cela, alors, le ci-dessus ne sera évidemment que exécutée avec succès, si l'ignorant utilisateur a récemment enregistré dans votre site web, mais pas déconnecté encore, ou si la session n'est pas encore expiré. "
OriginalL'auteur BalusC