मान लें कि आप अपनी साइट को अपनी साइट को "फ्रेम" करने के लिए नहीं चाहते हैं <iframe>
:
<iframe src="http://example.org"></iframe>
इसलिए आप अपने सभी पेजों में एंटी-फ्रेमिंग, फ्रेम बस्टिंग जावास्क्रिप्ट डालें:
/* break us out of any containing iframes */
if (top != self) { top.location.replace(self.location.href); }
अति उत्कृष्ट! अब आप "पर्दाफाश" करते हैं या किसी भी iframe से स्वचालित रूप से बाहर निकल जाते हैं। एक छोटी सी समस्या को छोड़कर।
जैसा कि यह पता चला है, आपके फ़्रेम-बस्टिंग कोड का भंडाफोड़ किया जा सकता है , जैसा कि यहां दिखाया गया है :
<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>
यह कोड निम्न कार्य करता है:
- जब भी ब्राउज़र वर्तमान पृष्ठ से दूर नेविगेट करने का प्रयास करता है, एक काउंटर बढ़ाता है
window.onbeforeunload
घटना हैंडलर के - एक टाइमर सेट करता है जो हर मिलीसेकंड के माध्यम से आग लगाता है
setInterval()
, और अगर वह काउंटर को देखता है, तो वर्तमान स्थान को हमलावर के नियंत्रण के सर्वर में बदल देता है - वह सर्वर HTTP स्थिति कोड 204 के साथ एक पृष्ठ पर कार्य करता है , जिससे ब्राउज़र कहीं भी नेविगेट करने का कारण नहीं बनता है
मेरा सवाल है - और यह एक वास्तविक समस्या की तुलना में जावास्क्रिप्ट पहेली का अधिक है - आप फ्रेम-बस्टिंग बस्टर को कैसे हरा सकते हैं?
मेरे पास कुछ विचार थे, लेकिन मेरे परीक्षण में कुछ भी काम नहीं किया गया:
- के
onbeforeunload
माध्यम से घटना को साफ करने का प्रयासonbeforeunload = null
कोई प्रभाव नहीं पड़ा - एक
alert()
रुकी हुई प्रक्रिया को जोड़ने से उपयोगकर्ता को पता चलता है कि यह हो रहा है, लेकिन किसी भी तरह से कोड में हस्तक्षेप नहीं किया; ओके पर क्लिक करने से हलचल सामान्य रूप से जारी रहती है - मैं
setInterval()
टाइमर को खाली करने का कोई तरीका नहीं सोच सकता
मैं एक जावास्क्रिप्ट प्रोग्रामर के बारे में अधिक नहीं हूं, इसलिए यहां मेरी चुनौती है: हे बस्टर, क्या आप फ्रेम-बस्टिंग बस्टर का भंडाफोड़ कर सकते हैं?
example.org
RFC 2606 ietf.org/rfc/rfc2606.txt