दिलचस्प पोस्ट
सामग्री प्रकार के साथ अजाक्स कॉल: 'आवेदन / जेसन' काम नहीं कर रहा है जब 'बैक' बटन को एक नवबार पर दबाया जाता है, तब पता लगा रहा है पोर्टेबल कोड को सी ++ में कैसे लिखें? जावास्क्रिप्ट का उपयोग करते हुए स्विच केस स्टेटमेंट में मैं श्रेणियों का उपयोग कैसे कर सकता हूं? समय के साथ GameObject घुमाएँ EntityFramework कोड-पहले कस्टम कनेक्शन स्ट्रिंग और माइग्रेशन विदेशी कुंजी के रूप में समग्र कुंजी Javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL हैंडशेक निरस्त किया गया: SSL लायब्रेरी में विफलता, आमतौर पर एक प्रोटोकॉल त्रुटि मॉकिटो का उपयोग करके निजी विधि का परीक्षण करना आईओएस शुरू पृष्ठभूमि थ्रेड रूबी में सीटीवी में आउटपुट सरणी एक .txt फ़ाइल से डेटा पढ़ना और प्रदर्शित करना आप बहु-आयामी सरणी से एक स्तंभ कैसे निकाल सकते हैं? NoClassDefFound त्रुटि: गलत नाम आप बैश में एक फ़ाइल पथ को सामान्य कैसे करते हैं?

फ़्रेम बस्टर बस्टर … बस्टर कोड की आवश्यकता है

मान लीजिए कि आप अपनी साइट को "फ्रेम" में अन्य साइट्स को एक <iframe> में नहीं चाहते हैं:

 <iframe src="http://example.org"></iframe> 

तो आप अपने सभी पृष्ठों में एन्टी-फ्रेमन, फ़्रेम बस्टिंग जावास्क्रिप्ट को सम्मिलित करते हैं:

 /* break us out of any containing iframes */ if (top != self) { top.location.replace(self.location.href); } 

अति उत्कृष्ट! अब आप "बस्ट" या किसी से युक्त आइफ्रेम से स्वचालित रूप से तोड़ देते हैं एक छोटी सी समस्या को छोड़कर

जैसा कि यह पता चला है, आपके फ्रेम-पर्दाफाश कोड का पर्दाफाश किया जा सकता है , जैसा कि यहां दिखाया गया है :

 <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> 

यह कोड निम्न करता है:

  • ब्राउज़र हर बार ब्राउज़र को चालू पृष्ठ से दूर नेविगेट करने का प्रयास करता है, खिड़की के माध्यम से। काउंटर से पहले ईवेंट हैंडलर
  • एक टाइमर सेट करता है जो सेट setInterval() माध्यम से हर मिलीसेकेंड को आग लगा देता है, और अगर यह काउंटर बढ़ता देखता है, तो हमलावर के नियंत्रण के सर्वर पर वर्तमान स्थान बदलता है
  • वह सर्वर एचटीटीपी स्थिति कोड 204 के साथ एक पृष्ठ पर काम करता है, जो ब्राउजर को कहीं भी नेविगेट करने का कारण नहीं है

मेरा प्रश्न है – और यह एक वास्तविक समस्या की तुलना में एक जावास्क्रिप्ट पहेली से अधिक है – आप फ्रेम-बस्टिंग बस्टर कैसे हार सकते हैं?

मेरे कुछ विचार थे, लेकिन मेरे परीक्षण में कुछ भी नहीं था:

  • onbeforeunload = null माध्यम से onbeforeunload = null घटना को साफ करने का प्रयास कोई प्रभाव नहीं था
  • एक alert() जोड़ने से alert() ने प्रक्रिया को रोक दिया, उपयोगकर्ता को यह बता रहा था कि यह हो रहा है, लेकिन किसी भी तरह से कोड में हस्तक्षेप नहीं किया; ओके पर क्लिक करने से बस्टिंग सामान्य रूप से जारी रहती है
  • setInterval() टाइमर को साफ़ करने के लिए मैं किसी भी तरह से नहीं सोच सकता

मैं ज़्यादातर एक जावास्क्रिप्ट प्रोग्रामर नहीं हूं, इसलिए यहां आपकी चुनौती है: अरे बस्टर, क्या आप फ़्रेम-पर्दाफाश बस्टर काट सकते हैं?

Solutions Collecting From Web of "फ़्रेम बस्टर बस्टर … बस्टर कोड की आवश्यकता है"

मुझे यकीन नहीं है कि यह व्यवहार्य है या नहीं – लेकिन अगर आप फ्रेम तोड़ नहीं सकते हैं, तो सिर्फ एक चेतावनी प्रदर्शित क्यों नहीं करें उदाहरण के लिए, यदि आपका पृष्ठ "शीर्ष पृष्ठ" नहीं है, तो एक सेट इन्टरवॉल विधि बनाएं जो फ्रेम को तोड़ने का प्रयास करता है यदि 3 या 4 के बाद भी आपका पृष्ठ अभी भी शीर्ष पृष्ठ नहीं है, तो एक डिवेल तत्व बनाएं, जिसमें संदेश के साथ संपूर्ण पृष्ठ (मोडल बॉक्स) को कवर किया गया है और जैसे लिंक …

आप इस पृष्ठ को अनधिकृत फ्रेम विंडो में देख रहे हैं – (ब्लाह ब्लाः … संभावित सुरक्षा समस्या)

इस समस्या को ठीक करने के लिए इस लिंक पर क्लिक करें

सबसे अच्छा नहीं है, लेकिन मुझे लगता है कि वे इस तरह से अपना रास्ता स्क्रिप्ट कर सकते हैं किसी भी तरह से नहीं दिख रहा है

एफडब्ल्यूआईडब्लू, सबसे वर्तमान ब्राउजर एक्स-फ़्रेम-विकल्प का समर्थन करते हैं: डायरेक्टिव से इनकार करते हैं , जो स्क्रिप्ट अक्षम होने पर भी काम करता है।

IE8:
http://blogs.msdn.com/ie/archive/2009/01/27/ie8-security-part-vii-clickjacking-defenses.aspx

फ़ायरफ़ॉक्स (3.6.9)
https://bugzilla.mozilla.org/show_bug.cgi?id=475530
https://developer.mozilla.org/en/The_X-FRAME-OPTIONS_response_header

क्रोम / वेबकिट
http://blog.chromium.org/2010/01/security-in-depth-new-security-features.html
http://trac.webkit.org/changeset/42333

इस के साथ आया, और ऐसा लगता है कि कम से कम फ़ायरफ़ॉक्स और ओपेरा ब्राउज़र में काम करना है।

 if(top != self) { top.onbeforeunload = function() {}; top.location.replace(self.location.href); } 

हमने http://seclab.stanford.edu/websec/framebusting/framebust.pdf से हमारी वेबसाइट में से एक में निम्नलिखित दृष्टिकोण का उपयोग किया है

 <style> body { display : none } </style> <script> if(self == top) { document.getElementsByTagName("body")[0].style.display = 'block'; } else{ top.location = self.location; } </script> 

थोड़ी देर के लिए इस पर विचार करने के बाद, मेरा मानना ​​है कि यह उन्हें दिखाएगा कि कौन मालिक है …

 if(top != self) { window.open(location.href, '_top'); } 

window.open() लिए लक्ष्य पैरामीटर के रूप में _top का उपयोग करके उसे एक ही विंडो में लॉन्च किया जाएगा।

आईफ्रेम के लिए सैंडबॉक्स पेश करने वाले मौजूदा एचटीएमएल 5 मानक को ध्यान में रखते हुए, इस पृष्ठ में प्रदान किए गए सभी फ्रेम पर्दाफाश कोड अक्षम कर दिए जा सकते हैं जब हमलावर सैंडबॉक्स का उपयोग करता है क्योंकि यह निम्नलिखित से आइफ्रेम को प्रतिबंधित करता है:

 allow-forms: Allow form submissions. allow-popups: Allow opening popup windows. allow-pointer-lock: Allow access to pointer movement and pointer lock. allow-same-origin: Allow access to DOM objects when the iframe loaded form same origin allow-scripts: Allow executing scripts inside iframe allow-top-navigation: Allow navigation to top level window 

कृपया देखें: http://www.whatwg.org/specs/web-apps/current-work/multipage/the-iframe-element.html#attr-iframe-sandbox

अब, विचार करें कि आक्रमणकर्ता ने आपकी साइट को iframe में होस्ट करने के लिए निम्नलिखित कोड का उपयोग किया है:

 <iframe src="URI" sandbox></iframe> 

उसके बाद, सभी जावास्क्रिप्ट फ़्रेम ख़त्म करने वाला कोड विफल हो जाएगा

सभी फ्रेम बसिंग कोड की जांच के बाद, केवल यह बचाव सभी मामलों में काम करता है:

 <style id="antiClickjack">body{display:none !important;}</style> <script type="text/javascript"> if (self === top) { var antiClickjack = document.getElementById("antiClickjack"); antiClickjack.parentNode.removeChild(antiClickjack); } else { top.location = self.location; } </script> 

जो कि मूल रूप से गुस्ताव रायड्टेड, एली बर्स्त्टेन, दान बोन्ह और कोलिन जैक्सन (2010) द्वारा प्रस्तावित है

 if (top != self) { top.location.replace(location); location.replace("about:blank"); // want me framed? no way! } 

ठीक है, इसलिए हम जानते हैं कि एक फ्रेम में थे तो हम एक अतिरिक्त विशेष पृष्ठ को स्थान के रूप में एक जीईटी चर के रूप में पथ के साथ। अब हम उपयोगकर्ता को बता रहे हैं कि क्या हो रहा है और लक्ष्य = "_ टॉप" विकल्प के साथ एक लिंक प्रदान कर रहा है यह सरल है और संभवतः काम करेगा (यह परीक्षण नहीं किया है), लेकिन इसमें कुछ उपयोगकर्ता इंटरैक्शन की आवश्यकता है शायद आप अपमानजनक साइट को उपयोगकर्ता को बता सकते हैं और कहीं अपनी साइट पर क्लिक जैकर्स के शर्म का हॉल बना सकते हैं .. बस एक विचार है, लेकिन रात काम करते हैं ..

सभी प्रस्तावित समाधान सीधे ऊपर खिड़की के स्थान में परिवर्तन को बल देते हैं। क्या होगा अगर कोई उपयोगकर्ता फ्रेम बनना चाहता है? उदाहरण के लिए खोज इंजन के छवि परिणामों में शीर्ष फ्रेम

मैंने एक प्रोटोटाइप लिखा था, जहां डिफ़ॉल्ट रूप से सभी इनपुट (लिंक, फॉर्म और इनपुट तत्व) निष्क्रिय होते हैं और / या सक्रिय नहीं होने पर कुछ भी नहीं करते हैं।

यदि एक फ़्रेम का पता लगाया गया है, तो इनपुट को अक्षम कर दिया गया है और पृष्ठ के शीर्ष पर एक चेतावनी संदेश दिखाया गया है। चेतावनी संदेश में एक लिंक है जो एक नई विंडो में पृष्ठ का एक सुरक्षित संस्करण खोल देगा। यह पेज को क्लिकजैकिंग के लिए इस्तेमाल होने से रोकता है, जबकि अभी भी उपयोगकर्ता को अन्य स्थितियों में सामग्री देखने की इजाजत देता है।

यदि कोई फ्रेम युक्त नहीं है, तो इनपुट सक्षम हैं

यहां कोड है आपको सुरक्षित मूल्यों के लिए मानक HTML विशेषताओं को सेट करने और वास्तविक मूल्यों को जोड़ने वाले अतिरिक्त गुण जोड़ने की आवश्यकता है। यह संभवतः अधूरा है और पूर्ण सुरक्षा अतिरिक्त विशेषताओं के लिए (मैं ईवेंट हैंडलर के बारे में सोच रहा हूं) शायद उसी तरह से व्यवहार करना होगा:

 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> <html> <head> <title></title> <script><!-- function replaceAttributeValuesWithActualOnes( array, attributeName, actualValueAttributeName, additionalProcessor ) { for ( var elementIndex = 0; elementIndex < array.length; elementIndex += 1 ) { var element = array[ elementIndex ]; var actualValue = element.getAttribute( actualValueAttributeName ); if ( actualValue != null ) { element[ attributeName ] = actualValue; } if ( additionalProcessor != null ) { additionalProcessor( element ); } } } function detectFraming() { if ( top != self ) { document.getElementById( "framingWarning" ).style.display = "block"; } else { replaceAttributeValuesWithActualOnes( document.links, "href", "acme:href" ); replaceAttributeValuesWithActualOnes( document.forms, "action", "acme:action", function ( form ) { replaceAttributeValuesWithActualOnes( form.elements, "disabled", "acme:disabled" ); }); } } // --> </script> </head> <body onload="detectFraming()"> <div id="framingWarning" style="display: none; border-style: solid; border-width: 4px; border-color: #F00; padding: 6px; background-color: #FFF; color: #F00;"> <div> <b>SECURITY WARNING</b>: Acme App is displayed inside another page. To make sure your data is safe this page has been disabled.<br> <a href="framing-detection.html" target="_blank" style="color: #090">Continue working safely in a new tab/window</a> </div> </div> <p> Content. <a href="#" acme:href="javascript:window.alert( 'Action performed' );">Do something</a> </p> <form name="acmeForm" action="#" acme:action="real-action.html"> <p>Name: <input type="text" name="name" value="" disabled="disabled" acme:disabled=""></p> <p><input type="submit" name="save" value="Save" disabled="disabled" acme:disabled=""></p> </form> </body> </html> 

मैं बहादुर होने जा रहा हूं और मेरी टोपी को इस अंगूठी में (प्राचीन के रूप में) पर फेंक रहा हूँ, देखें कि मैं कितने डाउनवॉट इकट्ठा कर सकता हूं।

मेरा प्रयास है, जो हर जगह काम करता है जो मैंने इसे परीक्षण किया है (क्रोम 20, आईई 8 और एफएफ 14):

 (function() { if (top == self) { return; } setInterval(function() { top.location.replace(document.location); setTimeout(function() { var xhr = new XMLHttpRequest(); xhr.open( 'get', 'http://mysite.tld/page-that-takes-a-while-to-load', false ); xhr.send(null); }, 0); }, 1); }()); 

मैंने इस कोड को <head> में रखा और इसे <body> के अंत से बुलाया ताकि यह सुनिश्चित हो सके कि मेरा पृष्ठ दुर्भावनापूर्ण कोड के साथ बहस शुरू होने से पहले प्रदान किया गया है, यह पता नहीं है कि यह सबसे अच्छा तरीका है, वाईएमएमवी।

यह कैसे काम करता है?

… मैंने सुना है आप पूछते हैं – अच्छा ईमानदार उत्तर है, मुझे सच में नहीं पता है। यह हर जगह काम करता है, जहां मैं हर जगह परीक्षण करता था, इसके बारे में बहुत सी गड़बड़ी लगाई थी, और यह आपके द्वारा चलाए जाने के आधार पर थोड़ा भिन्न होता है।

इसके पीछे यह सोच है:

  • न्यूनतम संभव अंतराल पर चलाने के लिए फ़ंक्शन सेट करें। मैंने देखा है कि किसी भी वास्तविक समाधान के पीछे मूल अवधारणा को फ़्रेम बस्टर-बस्टर की तुलना में अधिक घटनाओं के साथ अनुसूचक को भरना है।
  • हर बार समारोह में आग लग जाती है, शीर्ष फ्रेम के स्थान को बदलने का प्रयास करें। काफी स्पष्ट आवश्यकता
  • इसके अलावा तुरंत चलने के लिए एक फ़ंक्शन को शेड्यूल करें जो कि पूरा करने के लिए एक लंबा समय लगेगा (जिससे स्थान परिवर्तन के साथ हस्तक्षेप करने से फ्रेम बस्टर-बस्टर को अवरुद्ध किया जाए)। मैंने एक तुल्यकालिक XMLHttpRequest चुना क्योंकि यह एकमात्र तंत्र है जिसके बारे में मैं सोच सकता हूँ की आवश्यकता नहीं है (या कम से कम पूछना) उपयोगकर्ता की बातचीत और उपयोगकर्ता के CPU समय को चबा नहीं करता है

मेरी http://mysite.tld/page-that-takes-a-while-to-load (XHR का लक्ष्य) के लिए मैंने PHP स्क्रिप्ट का उपयोग किया जो इस तरह दिखता है:

 <?php sleep(5); 

क्या होता है?

  • क्रोम और फ़ायरफ़ॉक्स 5 सेकंड इंतजार करते हैं, जबकि XHR पूरा होता है, फिर फ़्रेम वाले पेज के यूआरएल पर सफलतापूर्वक रीडायरेक्ट करता है।
  • IE बहुत ही तुरंत पुनर्निर्देशित करता है I

क्या आप क्रोम और फ़ायरफ़ॉक्स में प्रतीक्षा समय से बच नहीं सकते हैं?

जाहिरा तौर पर नहीं। सबसे पहले मैंने एक्सएचआर को उस यूआरएल पर बताया जो 404 पर वापस लौटाएगा – यह फ़ायरफ़ॉक्स में काम नहीं करता। फिर मैंने sleep(5); की कोशिश की sleep(5); दृष्टिकोण है कि अंततः इस उत्तर के लिए उतरा, तो मैंने कई तरह से नींद की लंबाई के साथ चारों ओर खेलना शुरू कर दिया। मुझे व्यवहार के लिए कोई वास्तविक पैटर्न नहीं मिल सकता था, लेकिन मुझे पता चला कि यदि यह बहुत छोटा है, तो फ़ायरफ़ॉक्स गेंद नहीं खेलेंगे (क्रोम और आईई काफी अच्छी तरह से व्यवहार करते हैं) मैं नहीं जानता कि "बहुत कम" की परिभाषा वास्तविक शब्दों में है, लेकिन 5 सेकंड हर समय काम करने लगता है।


यदि कोई भी जावास्क्रिप्ट निंजा थोड़ी बेहतर बेहतर हो रहा है, तो यह क्यों है (शायद) गलत, अविश्वसनीय, सबसे खराब कोड है जो मैंने देखा है आदि। मैं खुशी से सुनूँगा।

2015 तक, आपको इसके लिए सीएसपी 2 के frame-ancestors निर्देश का उपयोग करना चाहिए। यह एक HTTP प्रतिक्रिया शीर्षक के द्वारा कार्यान्वित किया गया है।

जैसे

 Content-Security-Policy: frame-ancestors 'none' 

बेशक, कई ब्राउज़रों में अभी तक सीएसपी 2 का समर्थन नहीं है, इसलिए पुरानी X-Frame-Options हैडर को शामिल करना बुद्धिमान है:

 X-Frame-Options: DENY 

मैं वैसे भी दोनों को शामिल करने की सलाह दूंगा, अन्यथा आपकी साइट पुराने ब्राउज़र्स में क्लिकजैकिंग हमलों के लिए असुरक्षित रहती रहती है, और निश्चित रूप से आप दुर्भावनापूर्ण इरादों के बिना भी अवांछनीय फ्रेमन प्राप्त कर सकते हैं। अधिकांश ब्राउज़र स्वतः इन दिनों स्वचालित रूप से अपडेट करते हैं, फिर भी आप अभी भी कॉर्पोरेट उपयोगकर्ताओं को लेगसी एप्लिकेशन संगतता के कारणों के लिए इंटरनेट एक्सप्लोरर के पुराने संस्करणों में फंसते हैं।

ठीक है, आप काउंटर के मूल्य को संशोधित कर सकते हैं, लेकिन यह स्पष्ट रूप से एक भंगुर समाधान है आप अपनी सामग्री को किसी फ़्रेम के भीतर नहीं निर्धारित करने के बाद AJAX के माध्यम से अपनी सामग्री को लोड कर सकते हैं – यह भी एक महान समाधान नहीं है, लेकिन यह उम्मीद है कि इससे पहले से पहले लोड होने वाली घटना (मैं मान रहा हूँ) पर फायरिंग से बचा जाता है।

संपादित करें: एक अन्य विचार यदि आपको पता है कि आप किसी फ्रेम में हैं, तो यूजर को जावास्क्रिप्ट निष्क्रिय करने के लिए कहें, जो एक लिंक पर क्लिक करने से पहले आपको वांछित यूआरएल पर ले जाता है (एक क्वेरी स्ट्रिंग जो आपके पेज को उपयोगकर्ता को बताना है कि वे जावास्क्रिप्ट फिर से सक्षम कर सकते हैं वहां हैं)।

2 संपादित करें: परमाणु जाओ – अगर आपको पता है कि आप किसी फ्रेम में हैं, तो बस अपने दस्तावेज़ बॉडी की सामग्री को हटाएं और कुछ गंदा संदेश प्रिंट करें।

3 संपादित करें: क्या आप शीर्ष दस्तावेज़ की गणना कर सकते हैं और सभी फ़ंक्शंस को रिक्त करने के लिए सेट कर सकते हैं (यहां तक ​​कि अनाम हैं)?

मुझे लगता है कि आप लगभग वहां थे आपने कोशिश की है:

 window.parent.onbeforeunload = null; window.parent.location.replace(self.location.href); 

या, वैकल्पिक रूप से:

 window.parent.prevent_bust = 0; 

नोट: मैंने वास्तव में यह परीक्षण नहीं किया था।

यदि आप बस्टर कोड के बाद एक चेतावनी जोड़ते हैं, तो चेतावनी जावास्क्रिप्ट थ्रेड को रोक देगा, और यह पृष्ठ लोड करने देगा। यह स्टैक ओव्हरफ्लो क्या करता है, और यह मेरे iframes से बाहर निकल जाता है, भले ही मैं फ़्रेम बस्टिंग बस्टर का उपयोग करता हो यह मेरे सरल परीक्षण पृष्ठ के साथ भी काम किया। यह केवल फ़ायरफ़ॉक्स 3.5 और आईई 7 में खिड़कियों पर परीक्षण किया गया है।

कोड:

 <script type="text/javascript"> if (top != self){ top.location.replace(self.location.href); alert("for security reasons bla bla bla"); } </script> 

बुस्टर को बार-बार भी बुलाए जाने के बारे में क्या? यह एक दौड़ की स्थिति बना देगा, लेकिन कोई उम्मीद कर सकता है कि बस्टर शीर्ष पर आता है:

 (function() { if(top !== self) { top.location.href = self.location.href; setTimeout(arguments.callee, 0); } })(); 

यदि आप setInterval() द्वारा दिए गए मूल्यों को देखते हैं, तो वे आम तौर पर एक अंक होते हैं, इसलिए आप आमतौर पर ऐसे सभी इंटरप्ट को कोड की एक पंक्ति से अक्षम कर सकते हैं:

 for (var j = 0 ; j < 256 ; ++j) clearInterval(j) 

मैं बस फ्रेम बस्टर बस्टर जावास्क्रिप्ट को दूर करने के लिए एक रास्ता मिल सकता है। GetJackScript फ़ंक्शन में getElementsByName का उपयोग करना, मैंने फ़्रेम बस्टर और वास्तविक फ़्रेम बस्टर बस्टर स्क्रिप्ट के बीच एक लूप सेट किया है। इस पोस्ट को बाहर की जाँच करें http://www.phcityonweb.com/frame-buster-buster-buster-2426

setInterval और setTimeout स्वचालित रूप से वृद्धिशील अंतराल बनाते हैं। प्रत्येक बार setTimeout या setInterval कहा जाता है, यह संख्या एक के ऊपर बढ़ जाती है, इसलिए यदि आप setTimeout कहते हैं, तो आप मौजूदा, उच्चतम मूल्य प्राप्त करेंगे।

  var currentInterval = 10000; currentInterval += setTimeout( gotoHREF, 100 ); for( var i = 0; i < currentInterval; i++ ) top.clearInterval( i ); // Include setTimeout to avoid recursive functions. for( i = 0; i < currentInterval; i++ ) top.clearTimeout( i ); function gotoHREF(){ top.location.href = "http://your.url.here"; } 

चूंकि यह लगभग 10000 युगपत सेट इंटरफेल्स और सैटटाइमेट्स काम करने के लिए लगभग अनसुना है, और चूंकि setTimeout रिटर्न "अंतिम अंतराल या टाइमआउट बनाया गया है + 1", और चूंकि top.clearInterval अभी भी पहुंच-योग्य है, यह काला-हैट हमलों को फ्रेम में हार वेबसाइट जो ऊपर वर्णित हैं

उच्च-जैकिंग फ़्रेमसेट, आइफ्रेम और छवियों जैसी किसी भी सामग्री से बचने के लिए एचटीएसीएसी का उपयोग करें।

 RewriteEngine on RewriteCond %{HTTP_REFERER} !^http://www\.yoursite\.com/ [NC] RewriteCond %{HTTP_REFERER} !^$ RewriteRule ^(.*)$ /copyrights.html [L] 

यह उम्मीद की बजाय एक कॉपीराइट पेज दिखाएगा