Question

Disons que vous avez un widget JavaScript qui doit mettre le feu outre une demande à votre application Web si et seulement si l'utilisateur veut cliquer dessus. Vous ne voulez pas que cette demande soit vulnérable à CSRF si vous écrivez un iframe à la page. D'après les règles d'héritage d'origine le site parent ne sera pas capable de lire le jeton CSRF. Cependant Qu'en est-clickjacking (ou likejacking )? En raison de CSRF vous devez être dans un iframe et là pour les x-cadre-options ne pouvez pas aider, et le même pour .

L'attaquant va appliquer un masque SVG le iframe après le widget est chargé. Ce masque fera l'iframe invisible. A ce stade, l'attaquant peut soit redimensionner l'iframe à la taille de la page ou cette iframe invisible maintenant suivre le curseur. De toute façon à chaque fois que l'utilisateur clique partout sur la page, l'iframe reçoit l'événement click et son game over.

Donc, il y a une dualité, il semble que vous êtes coincé entre CSRF et Clickjacking. Ce que la meilleure solution (le cas échéant) à ce problème?

Était-ce utile?

La solution

En cliquant sur le widget doit ouvrir une fenêtre pop-up contenant une nouvelle page - un iframe est pas assez bon, il doit être une nouvelle fenêtre - qui est entièrement sous le contrôle de votre application web. Confirmez l'action, quelle qu'elle soit, sur cette page.

Oui, cela est un peu inélégante, mais l'architecture actuelle de la sécurité Web ne vous donne pas de meilleures options.

Autres conseils

Il n'y a aucun moyen d'empêcher la falsification de la demande en vertu d'une attaque clickjacking. Aucune défense CSRF existe qui peut résister à une attaque clickjacking, parce qu'il n'y a aucun moyen de distinguer un vrai clic d'un clic de faux sur le côté client.

mentions dans leur prévention CRSF tableur que l'une des conditions préalables à la défense jeton CSRF au travail est qu'aucune attaque XSS est en cours.

À mon avis devrait également inclure Clickjacking, comme le CSRF à jetons même caché à l'intérieur iframe ne peut pas se défendre contre clickjacking. La demande est forgée par un clic utilisateur direct.

Donc à la fin, nous ne sommes pas vraiment coincés entre CSRF et Clickjacking -. Défenses CSRF sont destinés à un autre type d'attaques où il y a beaucoup moins d'énergie du côté de l'attaquant

vers les questions que vous évoquez en ce qui concerne clickjacking et CSRF:

  • Quelle est la meilleure solution (le cas échéant) à ce problème - La meilleure défense pour Clickjacking du côté client est d'ouvrir un nouvel onglet de navigateur ou une fenêtre de navigateur redimensionnée avec un page de votre site et de confirmer l'action là, comme mentionne @Zack. Voici ce que le bouton twitter fait, et il ne peut pas être faux de demande, soit dans ce scénario.

  • Donc, il y a une dualité, il semble que vous êtes coincé entre CSRF et Clickjacking - Les défenses CSRF ne sont pas destinés à des cas comme XSS ou attaques Clickjacking, ils ne sont efficaces contre moins puissants attaques (email avec lien malveillant, lien malveillant post dans le forum, etc.)

Il n'y a pas de bonne programmable sur Clickjacking . Certaines entreprises comme les spammeurs poursuivre en justice la défense de clickjacking. D'autres choisissent d'afficher les fenêtres pop-up une fois utilisateur a cliqué sur l'intérieur iframe, bien qu'il dégrade l'expérience utilisateur, en particulier en cas d'un seul clic-bouton. C'est exactement ce que Twitter pour faire le bouton « Retweet ». Facebook déploie actuellement cette approche pour le bouton « Like », demandant confirmation à chaque fois que les demandes proviennent de domaines mis à l'index. Je l'ai entendu dire que Googlebot effectuer quelques heuristiques clickjacking alors que les pages d'indexation avec son « +1 » bouton (vérification des styles calculés, des éléments qui se chevauchent et ainsi de suite) ...

- MISE À JOUR - Quand vous dites « un widget », si vous voulez dire quelque chose en dehors de votre demande que les gens de non-authentifié Interagir avec alors ne pas tenir compte de cette réponse. Je relis votre question et vous jamais vraiment état de ce que vous entendez par « Widget ». Nous avons toutes sortes de « widgets » qui sont avec dans notre application. Je croyais que vous parliez, tout à l'intérieur d'une application que les utilisateurs authentifiés uniquement interagissaient avec. Si tel est le cas, alors cette réponse est ce que recommande l'OWASP.

- Réponse originale - « Vous ne voulez pas que cette demande soit vulnérable à CSRF si vous écrivez un iframe à la page. » Non, ne faites pas un iframe, de cette façon vous pouvez faire la recommandation OWASP normale pour la protection contre le cadrage Cross Site.

Pour se protéger contre une valeur de hachage CSRF (s), l'inclure dans votre formulaire (ou ajax données POST), puis vérifiez la valeur de hachage à l'extrémité arrière. Si elle correspond il est de votre site. Les données plus spécifiques que vous pouvez mettre dans le hachage mieux.

Exemple: Lorsqu'un utilisateur se connecte, vous pouvez créer une longue chaîne aléatoire et une cravate qui leur session. Cette chaîne ne doit jamais être visible sur votre site ou lors de l'affichage de la source. laisse ensuite dire que l'utilisateur tire un certain dossier spécifique qu'ils veulent modifier. Vous pouvez alors prendre que les utilisateurs longue chaîne aléatoire vous avez créé, append que les dossiers clé primaire, puis hachage eux. Le résultat de ce hachage, vous pouvez inclure dans votre formulaire comme caché. Ensuite, sur votre back-end avant de faire quoi que ce soit de vérifier la présence de ce caché, si elle n'existe pas, abort. Si elle existe, que les utilisateurs prendre chaîne de session aléatoire et la clé primaire de texte clair qu'ils ont soumis, hachage eux, si elle correspond vous savez qu'il est de votre site.

Et il est facile d'ajouter ce partout, même si votre site est déjà écrit (en supposant que votre site a une pièce unique de code inclus sur toutes les pages, comme un pied de page). Faire la valeur et hachée placer dans un endroit div caché dans votre pied de page. Ensuite, vous pouvez utiliser jQuery pour ajouter dynamiquement cette valeur de hachage cachée à toutes les formes de la page. Et vous pouvez utiliser jQuery.ajaxPrefilter pour l'ajouter à tous les ajax POSTs automatiquement dans le cas où vous faites un poste ajax et non un poste de forme normale. Nous avons certains sites très PROTÈGE grands qui ont déjà été codifiées de cette façon.

https://www.owasp.org/index.php/ Cross-Site_Request_Forgery_ (CALC) _Prevention_Cheat_Sheet

Si cela ressemble à ce chemin que vous voulez prendre que je pourrais montrer une partie du code jQuery pour le faire. En ce qui concerne ce que vous êtes hash, comment vous voulez vérifier le back-end, etc ... que tout dépend si vous utilisez ColdFusion, PHP, PL / SQL (PSPGen) etc ... Je peux vous indiquer la direction si l'un de ceux-ci.

Je pense que je comprends ce que vous faites. Vous voulez permettre à tous les sites de votre widget iframe, donc un attaquant a le contrôle complet du code source du parent et peut créer des routines Clickjacking aux utilisateurs de la force de cliquer sur le widget.

Ainsi, le iframe serait en mesure d'employer un jeton CSRF, comme il se doit, ce qui protège contre ce type d'attaque tant que le cadre parent ne peut pas lire le jeton.

Clickjacking, comme je suis sûr que vous le savez, est un type complètement différent de l'attaque que CSRF et a besoin d'une défense différente.

Vraiment, si le widget est super important que la mise en œuvre d'authentification 2 phases. Utilisez http://twilio.com pour appeler l'utilisateur et lui entrer une broche. Ou envoyez un e-mail à l'utilisateur avec un lien de vérification. Ou demander à l'utilisateur de vérifier l'action la prochaine fois que l'utilisateur se connecte sur le site Web de votre widget.

Si vous aviez le contrôle du cadre parent, vous auriez alors plus d'options. Il serait alors une question de protection XSS.

Mise à jour après la réponse correcte a été sélectionnée

Donc, mon approche de protection contre clickjacking est un par-dessus bord bits. On dirait qu'il peut être protégé en utilisant une fenêtre pop-up avec une action de confirmation.

En raison de CSRF vous devez être dans une iframe ...

Non

. Vous ne pouvez pas corriger CSRF avec les cookies de forme et d'autres tours de nonce. Peu importe où vous les mettez.

Donc, il y a une dualité, il semble que vous êtes coincé entre CSRF et Clickjacking. Ce que la meilleure solution (le cas échéant) à ce problème?

Pour corriger CSRF, vous devez supprimer la menace en fixant le serveur qui a l'injection ou un code malveillant, arrêter l'e-mail de phishing, etc. En l'absence d'un environnement favorable, vous devez ré-authentifier l'utilisateur (ou fournir un autre défi / réponse pour assurer un utilisateur interactif). Voir:

Te remdiate Clickjacking, utiliser-Frame-Options X ou code de trame révolutionnaire en Javascript. Mais je ne pense pas que ce soit sont à toute épreuve. Voir:

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top