Cadre Buster Buster ... buster code nécessaire
Disons que vous ne voulez pas d'autres sites à "l'image" de votre site dans un <iframe>
:
<iframe src="http://example.org"></iframe>
Si vous insérez anti-encadrement, cadre de contournement du code JavaScript dans vos pages:
/* break us out of any containing iframes */
if (top != self) { top.location.replace(self.location.href); }
Excellent! Maintenant, vous "buste" ou de sortir de tout contenant iframe automatiquement. Sauf pour un petit problème.
Comme il s'avère, votre cadre de contournement du code peut être éclaté, comme illustré ici:
<script type="text/javascript">
var prevent_bust = 0
window.onbeforeunload = function() { prevent_bust++ }
setInterval(function() {
if (prevent_bust > 0) {
prevent_bust -= 2
window.top.location = 'http://example.org/page-which-responds-with-204'
}
}, 1)
</script>
Ce code est le suivant:
- incrémente un compteur à chaque fois que le navigateur tente de naviguer loin de la page en cours, via le
window.onbeforeunload
gestionnaire d'événement - met en place un timer qui déclenche à chaque milliseconde par
setInterval()
, et si elle voit le compteur incrémenté, les changements de la position actuelle à un serveur de l'attaquant contrôle - ce serveur sert une page avec le code d'état HTTP 204, qui ne provoque pas le navigateur pour naviguer n'importe où
Ma question est -- et ce n'est plus un JavaScript puzzle que d'une réelle problème - comment pouvez-vous vaincre le cadre de casse-buster?
J'ai eu quelques idées, mais rien n'a fonctionné lors de mes tests:
- essayer de dégager le
onbeforeunload
événement viaonbeforeunload = null
a eu aucun effet - l'ajout d'un
alert()
arrêté le processus de laisser l'utilisateur de savoir ce qui se passait, mais ne pas interférer avec le code en aucune façon; en cliquant sur OK permet le contournement de continuer normalement - Je ne peux pas penser à une façon d'effacer le
setInterval()
minuterie
Je ne suis pas beaucoup de programmeurs JavaScript, voici donc mon défi pour vous: hey buster, pouvez-vous le buste le cadre de casse-buster?
Matt, le bloc-buster-buster code affiché ci-dessus certainement fonctionne. Un.. euh.. ami.. de la mine.. dit moi .. à ce sujet. Ou quelque chose. 🙂
Jeff, êtes-vous tester avec windows sur le même domaine? On dirait que vous êtes, parce que si vous n'étiez pas à l'époque des restrictions de sécurité serait de vous empêcher de modifier 'onBeforeUnload'
Sur une note de côté: Lors de la publication des exemples, veuillez utiliser des domaines comme
example.org
comme spécifié dans la RFC 2606 ietf.org/rfc/rfc2606.txtConcernant le thème général de la contre-contre-contre-mesures: galactanet.com/comic/view.php?strip=209
OriginalL'auteur Jeff Atwood | 2009-06-06
Vous devez vous connecter pour publier un commentaire.
Je ne sais pas si c'est viable ou pas - mais si vous ne pouvez pas casser l'image, pourquoi ne pas simplement afficher un avertissement. Par exemple, Si votre page n'est pas le "haut de page" créer une méthode setInterval qui tente de briser l'image. Si au bout de 3 ou 4 tente votre page n'est toujours pas le haut de la page créer un élément div qui couvre l'ensemble de la page (modal box) avec un message et un lien comme...
Pas le meilleur, mais je ne vois pas de toute façon, ils pourraient script de leur moyen de sortir de cela.
Non seulement est-ce une bonne façon d'éviter les abus, il est assez convivial pour les sites qui veulent iframe votre site simplement pour prendre un coup d'oeil à elle, mais ne pas autoriser l'utilisation de il. Idéalement, je pense qu'une capture d'écran de la page d'accueil du site doit être utilisé, avec une explication de pourquoi il ne peut pas être utilisé dans l'iframe recouvert sur le dessus.
C'est la façon dont Facebook fait.
mais peut-être que cela pourrait être exploitée que si le contournement du site, à son tour, permettra de créer un faux anti anti anti ... (je ne sais pas combien anti nous sommes jusqu'à maintenant) lighbox div pour lui-même présentant un lien de phishing ou autre ... à confirmer
Une autre idée serait de simplement wipeout la page complètement avec quelque chose comme
document.write("");
(après avoir établi qu'il est en train d'être encadréeOriginalL'auteur Hugoware
FWIW, la plupart des navigateurs actuels soutien la X-Frame-Options: refuser l' directive, qui fonctionne même lorsque le script est désactivé.
IE8:
http://blogs.msdn.com/ie/archive/2009/01/27/ie8-security-part-vii-clickjacking-defenses.aspx
Firefox (3.6.9)
https://bugzilla.mozilla.org/show_bug.cgi?id=475530
https://developer.mozilla.org/en/The_X-FRAME-OPTIONS_response_header
Chrome/Webkit
http://blog.chromium.org/2010/01/security-in-depth-new-security-features.html
http://trac.webkit.org/changeset/42333
Voici une page de test: enhanceie.com/test/clickjack. Chrome 4.1.249.1042 prend en charge. Opera 10.50 prend en charge. Firefox 3.6.2 ne prend PAS encore en charge. Safari 4.0.3 prend en charge.
Firefox 3.6.9 le prend en charge en mode natif ( hackademix.net/2010/08/31/... ) et de tout installer Firefox avec NoScript a eu depuis le début de l'année 2009 ( hackademix.net/2009/01/29/x-frame-options-in-firefox )
La devrait être le nouveau accepté de répondre.
Il est préférable de le combiner avec le javascript framebuster.
OriginalL'auteur EricLaw
Nous avons utilisé l'approche suivante dans l'un de nos sites web à partir de http://seclab.stanford.edu/websec/framebusting/framebust.pdf
Cette réponse ou de la mine doit être sélectionné 🙂
J'aime bien ton idée d'utiliser à la fois le présent et le X-Frame-Options:refuser de répondre.
Cela nécessite de JS, ce qui est un assez gros fardeau à mon humble avis.
+1 - C'est la meilleure réponse quand X-FRAME-OPTIONS ne peuvent pas être utilisés. (Par exemple, lorsque vous avez besoin pour conditionnellement autoriser ou refuser en fonction de référent.)
OriginalL'auteur Dungeon Hunter
Venu avec cela, et il semble que cela fonctionne au moins dans Firefox et le navigateur Opera.
Cela ne fonctionne que si les deux fenêtres sont du même domaine; un événement rare, quand vous voulez échapper à partir d'une trame.
Si il y a des structures imbriquées, vous aurez à marcher le cadre de la chaîne et de supprimer tous les
onbeforeunload
gestionnaires, et pas seulement l'une sur le dessus!précision importante: cela a fonctionné pour moi parce que l'iframe src= était définie de façon dynamique, et donc de la croix-domaine de la politique n'était PAS en vigueur. J-P est absolument droit, statique src= ceci ne fonctionnerait pas.
ok, maintenant quelqu'un peut venir avec un cadre buster buster buster buster?
OriginalL'auteur Jani Hartikainen
Compte tenu de courant standard HTML5, qui a introduit sandbox pour l'iframe, tous les cadres casse les codes qui figurent dans cette page peuvent être désactivées lorsque l'attaquant utilise le bac à sable, car il limite l'iframe à partir des éléments suivants:
Voir: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#attr-iframe-sandbox
Maintenant, envisager l'attaquant a utilisé le code suivant pour héberger votre site en iframe:
Ensuite, tous les JavaScript cadre de contournement du code de l'échec.
Après vérification de tous les cadre du transport par autobus code, seulement ce moyen de défense fonctionne dans tous les cas:
que proposé à l'origine par Gustav Rydstedt Elie Bursztein, Dan Boneh, et Collin Jackson (2010)
OriginalL'auteur
Après méditer ce pour un peu de temps, je crois que ça va leur montrer qui est le patron...
À l'aide de
_top
que le paramètre cible pourwindow.open()
lancera dans la même fenêtre.OriginalL'auteur Josh Stodola
OriginalL'auteur
Ok, donc nous savons qui ont été dans un cadre. Nous avons donc l'emplacement.href vers une autre page spéciale avec le chemin d'accès comme une variable. Nous allons maintenant expliquer à l'utilisateur ce qui se passe et de fournir un lien avec un target="_TOP" option. C'est simple, et serait probablement travailler (n'ai pas testé), mais il nécessite une certaine interaction avec l'utilisateur. Peut-être que vous pourriez le site incriminé à l'utilisateur et de faire un hall of shame de cliquer sur jackers de votre site quelque part.. Juste une idée, mais il travail de nuit..
OriginalL'auteur
Toutes les solutions proposées directement forcer un changement dans l'emplacement de la fenêtre du haut. Si un utilisateur veut l'image d'être là? Par exemple, le haut cadre dans l'image des résultats de moteurs de recherche.
J'ai écrit un prototype où, par défaut, toutes les entrées (des liens, des formes et des éléments d'entrée) sont désactivés et/ou de ne rien faire quand il est activé.
Si un contenant de trame est détectée, les entrées sont laissé désactivé et un message d'avertissement est affiché en haut de la page. Le message d'avertissement contient un lien qui permet d'ouvrir une version safe de la page dans une nouvelle fenêtre. Cela empêche l'utilisation de la page pour le clickjacking, tout en permettant à l'utilisateur de visualiser le contenu dans d'autres situations.
Si aucun contenant de l'image est détectée, les entrées sont activées.
Voici le code. Vous devez définir le standard HTML attributs à des valeurs sûres et d'ajouter des attributs supplémentaires qui contiennent les valeurs réelles. C'est probablement incomplète et pour la pleine sécurité des attributs supplémentaires (je pense à propos de gestionnaires d'événements) devront probablement être traités de la même manière:
Le message d'avertissement serait encore montré, mais bien sûr, il est facile de couvrir le lien vers la page sécurisée comme vous le suggérez. Mais pourquoi passer par tous les ennuis de cadrage de ma page d'amener les gens à cliquer sur un familier bouton si vous pouvez simplement copier la page et obtenir le même effet? Le code ci-dessus empêche principalement de clickjacking. Si vous montrer ma page de manière invisible au-dessus de l'autre page, il n'est pas possible d'invoquer des actions sur mon site.
Si celui-ci est placé dans une IE8 zone d'accès restreint du cadre ou de la sandbox de Chrome frame le Javascript ne sera jamais exécuté. Je me demande quelles sont les modifications nécessaires dans les cas
OriginalL'auteur Johan Stuyts
Je vais être courageux et de jeter mon chapeau dans l'anneau sur celui-ci (ancienne que c'est), voir combien de downvotes je peux recueillir.
Ici est une tentative de ma part, ce qui ne semble pas fonctionner partout, je l'ai testé (Chrome20, IE8 et FF14):
J'ai placé ce code dans les
<head>
et l'a appelé à partir de la fin de la<body>
à faire en sorte que ma page est rendue avant qu'il ne commence à discuter avec le code malveillant, je ne sais pas si c'est la meilleure approche, YMMV.Comment ça fonctionne?
...Je vous entends demander - eh bien, la réponse honnête est, je n'ai pas vraiment savoir. Il a fallu beaucoup de fausser sur le point de le faire fonctionner partout, j'ai test, et l'effet exact qu'il a varie légèrement selon l'endroit où vous l'exécutez.
Ici est la pensée derrière elle:
Pour mon
http://mysite.tld/page-that-takes-a-while-to-load
(la cible de la XHR), j'ai utilisé un script PHP qui ressemble à ceci:Ce qui se passe?
Ne pouvez pas vous éviter les temps d'attente dans Chrome et Firefox?
Apparemment pas. Au début, j'ai pointé le XHR à une URL qui retourne une erreur 404 - ce qui ne fonctionne pas dans Firefox. Ensuite, j'ai essayé la
sleep(5);
approche que j'ai finalement atterri sur cette réponse, puis j'ai commencé à jouer avec le sommeil longueur de diverses manières. Je n'ai trouvé aucun motif réel du comportement, mais je n'ai trouver que si elle est trop courte, plus précisément Firefox ne va pas jouer à la balle (Chrome et IE semblent être assez bien comportés). Je ne sais pas ce que la définition de "trop court" est en termes réels, mais 5 secondes semble de travail à chaque fois.Si un passage Javascript ninjas voulez expliquer un peu mieux ce qu'il se passe, pourquoi c'est (probablement) mauvais, peu fiable, le pire de code qu'ils aient jamais vu, etc j'ai serons ravis de vous écouter.
OriginalL'auteur DaveRandom
En 2015, vous devez utiliser CSP2 de
châssis ancêtres
directive pour cela. Ceci est mis en œuvre par l'intermédiaire d'une tête de réponse HTTP.par exemple
Bien sûr, pas beaucoup de navigateurs prennent en charge CSP2 encore si il est sage d'inclure la vieille
X-Frame-Options
en-tête:Je vous conseille d'inclure à la fois de toute façon, sinon, votre site continuera à être vulnérables à Le Clickjacking attaques dans les anciens navigateurs, et bien sûr, vous obtenez indésirables cadrage, même sans intention malveillante. La plupart des navigateurs ne mettre à jour automatiquement ces jours, mais vous avez toujours tendance à obtenir de l'entreprise utilisateurs d'être coincé sur les anciennes versions d'Internet Explorer pour des applications héritées des raisons de compatibilité.
OriginalL'auteur SilverlightFox
Bien, vous pouvez modifier la valeur du compteur, mais évidemment c'est un fragile de la solution. Vous pouvez charger votre contenu via AJAX après avoir déterminé le site n'est pas dans un cadre a également pas une bonne solution, mais je l'espère évite de tir la sur beforeunload événement (je suppose).
Edit: une Autre idée. Si vous constatez que vous êtes dans un cadre, de demander à l'utilisateur de désactiver le javascript, avant de cliquer sur un lien qui vous mène à l'URL souhaitée (passage d'une chaîne de requête qui permet à votre page de savoir dire à l'utilisateur qu'il peut ré-activer javascript une fois qu'ils sont là).
Edit 2: le nucléaire - si vous remarquez que vous êtes dans une image, il suffit de supprimer le corps du document contenu et d'impression désagréable message.
Edit 3: Pouvez-vous énumérer le haut du document et de définir toutes les fonctions à null (même anonyme)?
<body>
à l'intérieur d'un<plaintext>
tag set dedisplay: none
. C'est assez efficace.OriginalL'auteur RedFilter
Si vous ajoutez une alerte à droite après le buster code, l'alerte de décrochage de l'javascript fil, et il permet le chargement de la page. C'est ce que StackOverflow, et bustes de mon iframe, même lorsque j'utilise l'image éclatante de buster. Il a également travaillé avec mon simple page de test. Cela a seulement été testé dans Firefox 3.5 et IE7 sur windows.
Code:
OriginalL'auteur Marius
Je pense que vous avez été près de là. Avez-vous essayé:
ou bien:
Remarque: je n'ai pas fait le test.
Cool. Il est toujours difficile de répondre avec du code non testé - je faire pour obtenir au moins l'idée de l'ensemble et laisser le pauvre asker de débogage. 🙂
Ne fonctionne pas si le parent est sur un autre domaine, qui est probablement le cas!
OriginalL'auteur Jeff Meatball Yang
Qu'en appelant le buster à plusieurs reprises ainsi? Cela va créer une situation de concurrence, mais on peut espérer que le buster vient en tête:
OriginalL'auteur Christoph
Si vous regardez les valeurs retournées par
setInterval()
ils sont généralement de simples chiffres, de sorte que vous pouvez normalement désactiver toutes ces interruptions avec une seule ligne de code:OriginalL'auteur Robin Nixon
J'ai peut-être juste tout juste d'avoir un moyen de le buste le cadre de buster buster javascript. À l'aide de la getElementsByName dans ma fonction javascript, j'ai mis une boucle entre le cadre buster et le cadre buster buster script.
vérifiez ce post. http://www.phcityonweb.com/frame-buster-buster-buster-2426
OriginalL'auteur Phcityonweb
setInterval et setTimeout créer une incrémentation automatique de l'intervalle. Chaque fois setTimeout ou setInterval est appelée, cette proportion passe par un, de sorte que si vous appelez setTimeout, vous aurez le courant, la valeur la plus élevée.
Car il est presque inconnu pour qu'il y ait 10000 simultanée setIntervals et setTimeouts de travail, et depuis setTimeout renvoie "dernier intervalle ou de l'expiration de créé + 1", et depuis le haut.clearInterval est toujours accessible, ce sera l'encontre du black-hat attaques à l'image des sites web qui sont décrits ci-dessus.
OriginalL'auteur cwallenpoole
Utiliser htaccess pour éviter haute-jacking jeu de cadres, iframe et de tout contenu comme des images.
Ceci affichera une page de copyright à la place de l'.
<meta name="referrer" …/>
et b) pose aussi lorsque l'on clique sur les liens, vous aussi interdire les liens de votre page et de briser le web.OriginalL'auteur B.F.