ফ্রেম বাস্টার বাস্টার… বাস্টার কোড প্রয়োজন


422

ধরা যাক আপনি অন্য সাইটগুলিকে আপনার সাইটের "ফ্রেম" তৈরি করতে চান না <iframe>:

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

সুতরাং আপনি আপনার সমস্ত পৃষ্ঠায় ফ্রেম বুস্টিং জাভাস্ক্রিপ্ট এন্টি ফ্রেমিং sertোকান:

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

অসাধারণ! এখন আপনি "বুস্ট" বা কোনও ধারণকৃত আইফ্রেমে স্বয়ংক্রিয়ভাবে বিচ্ছিন্ন হয়ে যান। একটি ছোট সমস্যা বাদে।

এটি সক্রিয় আউট হিসাবে, আপনার ফ্রেম-কীট ধ্বংস দিবসে কোড busted যাবে , যেমন এখানে দেখানো :

<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ইভেন্ট হ্যান্ডলারের মাধ্যমে ব্রাউজারটি বর্তমান পৃষ্ঠা থেকে দূরে নেভিগেট করার চেষ্টা করলে প্রতিবার কাউন্টার বাড়ায় incre
  • একটি টাইমার সেট করে যা প্রতিটি মিলিসেকেন্ডের setInterval()মধ্যে দিয়ে গুলি চালায় এবং যদি এটি কাউন্টারটিকে বাড়ানো দেখায়, বর্তমান অবস্থানটিকে আক্রমণকারীর নিয়ন্ত্রণের একটি সার্ভারে পরিবর্তন করে
  • এই সার্ভারটি HTTP স্থিতি কোড 204 সহ একটি পৃষ্ঠা পরিবেশন করে , যা ব্রাউজারটি কোথাও নেভিগেটের কারণ নয়

আমার প্রশ্নটি - এবং এটি একটি জাভাস্ক্রিপ্ট ধাঁধা একটি প্রকৃত সমস্যার চেয়ে বেশি - আপনি কীভাবে ফ্রেম-বুস্টিং বাস্টারকে পরাজিত করতে পারেন?

আমার কয়েকটি চিন্তা ছিল, কিন্তু আমার পরীক্ষায় কিছুই কার্যকর হয়নি:

  • onbeforeunloadমাধ্যমে ইভেন্টটি সাফ করার চেষ্টা করার onbeforeunload = nullকোনও প্রভাব ছিল না
  • alert()প্রক্রিয়াটি একটি থামানো যুক্ত করে ব্যবহারকারীকে তা ঘটছে তা জানাতে দিন, তবে কোনওভাবেই কোডটিতে হস্তক্ষেপ করেন নি; ওকে ক্লিক করার ফলে বুস্টিংটি স্বাভাবিক হিসাবে চালিয়ে যেতে দেয়
  • আমি setInterval()টাইমার সাফ করার কোনও উপায় নিয়ে ভাবতে পারি না

আমি কোনও জাভাস্ক্রিপ্ট প্রোগ্রামার খুব বেশি নই, সুতরাং এখানে আমার কাছে আপনার চ্যালেঞ্জটি: আরে বাস্টার, আপনি কি ফ্রেম-বাস্টিং বুস্টারকে বুস্ট করতে পারবেন?


6
আমি নিশ্চিত নই যে ফ্রেম-বাস্টার-বাস্টার আসলে কাজ করে ... আমি যখন এটি পরীক্ষা করার চেষ্টা করি (204 ফেরত দেওয়ার জন্য আমি যে হ্যান্ডলারটি পুনর্নির্দেশ করি) তখন এটি পৃষ্ঠার বাইরে যে কোনও জায়গায় নেভিগেট করা থেকে বিরত রাখে - টাইপিং স্টাফ সহ ঠিকানা বারে! আমাকে যে কোনও জায়গায় যেতে ব্রাউজার ট্যাবটি বন্ধ করতে হবে এবং একটি নতুন খুলতে হবে। সুতরাং অন্য কথায়, আমি নিশ্চিত এটির কোনও সমাধানের দরকার নেই, কারণ ফ্রেম-বাস্টার-বাস্টারকে ফাঁস করতে চাইছে ... এটি দিয়ে শুরু করার জন্য আবদ্ধ। :) (তা হয় বা আমি আমার পরীক্ষাটি ভুল করেছিলাম, যা কখনই হতে পারে না ...);)
ম্যাট উইনকলার

16
ম্যাট, ফ্রেম-বাস্টার-বাস্টার কোড অবশ্যই উপরে পোস্ট করেছে কাজ করে। এ .. আহ .. বন্ধু .. আমার .. আমাকে জানিয়েছে .. এ সম্পর্কে। অথবা অন্যকিছু. :)
জেফ আতউড

10
জেফ, আপনি কি একই ডোমেনে দুটি উইন্ডো দিয়ে পরীক্ষা করছেন? দেখে মনে হচ্ছে আপনি হচ্ছেন কারণ যদি আপনি না হন তবে সুরক্ষা বিধিনিষেধগুলি আপনাকে 'অনপরেউনলোড' পরিবর্তন করতে বাধা দিত
জেমস

29
একদিকে নোট: উদাহরণ পোস্ট করার সময়, দয়া করে example.orgআরএফসি 2606 ietf.org/rfc/rfc2606.txt
ক্রিস্টোফের

3
কাউন্টার-কাউন্টার-কাউন্টারশিয়ারের সাধারণ থিম সম্পর্কিত: গ্যালাক্যানেট.com
জোয়

উত্তর:


149

আমি নিশ্চিত না এটি কার্যকর এবং না - তবে আপনি যদি ফ্রেমটি ভাঙতে না পারেন তবে কেন কেবল একটি সতর্কতা প্রদর্শন করবেন না। উদাহরণস্বরূপ, যদি আপনার পৃষ্ঠাটি "শীর্ষ পৃষ্ঠা" না হয় তবে একটি সেটআইন্টারওয়াল পদ্ধতি তৈরি করুন যা ফ্রেমটি ভাঙার চেষ্টা করে। যদি 3 বা 4 চেষ্টা করার পরেও আপনার পৃষ্ঠাটি শীর্ষ পৃষ্ঠাটি না থেকে থাকে - একটি ডিভ উপাদান তৈরি করুন যা পুরো পৃষ্ঠাটি (মডেল বাক্স) কে একটি বার্তা এবং এর মতো একটি লিঙ্কের সাথে কভার করে ...

আপনি এই পৃষ্ঠাটি একটি অননুমোদিত ফ্রেম উইন্ডোতে দেখছেন - (ব্লেহ ব্লাহ ... সম্ভাব্য সুরক্ষা সমস্যা)

এই সমস্যাটি সমাধান করতে এই লিঙ্কটিতে ক্লিক করুন

সেরা নয়, তবে তারা এ থেকে বেরিয়ে যাওয়ার কোনও উপায় তাদের দেখতে পাচ্ছে না।


2
আমি এটি চেষ্টা করেছি এবং এটি কাজ করে। এই সমাধানটি সম্পর্কে আমি পছন্দ করি এমন আরেকটি অংশটি হ'ল এটি আপনার বিষয়বস্তুতে যাওয়ার আগে তিনি কী ধরণের সাইট ব্যবহার করেছিলেন তা ব্যবহারকারীদের সামনে নিয়ে আসে। নমুনা কোড: যদি (প্যারেন্ট.ফ্রেমস দৈর্ঘ্য> 0)। শীর্ষ.লোকেশন.রেপ্লেস (ডকুমেন্ট.লোকেশন); সেটটাইমআউট (ফাংশন () {যদি (প্যারেন্ট.ফ্রেমস লেন্থ> 0) {ডকুমেন্ট.লোকেশন = " google.com ";}}, 10); }
পোপ

অপব্যবহার এড়ানোর জন্য এটি কেবল একটি ভাল উপায়ই নয়, এটি যে সাইটগুলি আপনার সাইটের আইফ্রেম করতে চাইবে কেবল এটির জন্য নজর দেওয়া উচিত, যদিও এটির ব্যবহারের অনুমতি না দেয়। আদর্শভাবে, আমি মনে করি যে সাইটের হোমপেজের স্ক্রিনশটটি ব্যবহার করা উচিত, কেন এটি শীর্ষে যদি আইফ্রেমে ওভারলাইডে ব্যবহার করা যায় না তার কিছু ব্যাখ্যা দিয়ে।
Wheresrhys

33
ফেসবুক এভাবেই করে।
শমিত্তোমার

2
তবে সম্ভবত এটি কাজে লাগানো যেতে পারে যদি বুস্টিং সাইটটি একটি মিথ্যা অ্যান্টি-অ্যান্টি বিরোধী তৈরি করে ... (আমরা এখন পর্যন্ত কতটা বিরোধী) ডাইংবক্স ডিভ নিজেই ফিশিং লিঙ্ক উপস্থাপন করার জন্য বা যা কিছু ...
tbc

7
অন্য ধারণাটি document.write("");
হ'ল পৃষ্ঠটি

211

FWIW, বেশিরভাগ বর্তমান ব্রাউজারগুলি এক্স-ফ্রেম-বিকল্পগুলিকে সমর্থন করে : নির্দেশনা অস্বীকার করে , যা স্ক্রিপ্ট অক্ষম থাকলেও কার্যকর হয়।

আইই 8:
http://blogs.msdn.com/ie/archive/2009/01/27/ie8-security-part-vii-cljacking-defense.aspx

ফায়ারফক্স (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


6
দুর্দান্ত, এটি ব্রাউজারে সমর্থন করে ex আপনি যখন "সর্বাধিক ব্রাউজারগুলি" বলবেন, বিশেষত কোনটি? আইই 8 ব্যতীত আমি কোনও ভাল উত্স খুঁজে পাচ্ছি না।
জেফ অ্যাটউড 21

2
এখানে একটি পরীক্ষার পৃষ্ঠা রয়েছে: বর্ধনশীলতা / পরীক্ষা / ক্লিকজ্যাক । Chrome 4.1.249.1042 সমর্থন করে। অপেরা 10.50 সমর্থন করে। ফায়ারফক্স 3.6.2 এখনও সমর্থন করে না। সাফারি 4.0.3 সমর্থন করে।
এরিকল

1
ফায়ারফক্স ৩.6.৯ এটিকে নেটিভভাবে সমর্থন করবে ( হ্যাকাদেমিক্স.এন / ২০০০ / ০৮ /১…/ ২০ ) এবং নোস্ক্রিপ্টের সাথে যে কোনও ফায়ারফক্স ইনস্টল হয়েছে এটি ২০০৯ এর শুরু থেকেই হয়েছে ( হ্যাকাদেমিক্স.ন. অপশন-ইন-ফায়ারফক্স )
এসকোলো

4
এটি জাভাস্ক্রিপ্ট ফ্রেমবাসারের সাথে একত্রিত করা ভাল।
জেসি ওয়েইগার্ট

1
: অথবা এই পৃষ্ঠাতে ডিসেম্বর '12 উত্তর সঙ্গে এই একত্রিত stackoverflow.com/a/13708510/328397
goodguys_activate

34

আমরা আমাদের ওয়েবসাইটের একটিতে 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>

3
বিঙ্গো! কেন এটি সর্বোত্তম উত্তর হওয়ায় এটিকে আরও উত্সাহিত করা হয়নি তা নিশ্চিত নয় (এক্স-ফ্রেম-বিকল্পগুলির উত্তরের পরে, তবে উভয়কে একত্রিত করা ভাল)
জেসি ওয়েইগার্ট

1
এই উত্তর বা আমার নির্বাচন করা উচিত :)

আমি এই এবং এক্স-ফ্রেম-বিকল্পগুলি উভয়ই আপনার ব্যবহার পছন্দ করি: উত্তর অস্বীকার করুন।
ম্যাক্স ওয়েস্ট

এটির জন্য জেএস দরকার যা একটি দুর্দান্ত বোঝা আইএমএইচও।
নবীন

1
+1 - এক্স-ফ্রেম-বিকল্পগুলি ব্যবহার করা যায় না যখন এটি সেরা উত্তর। (উদাহরণস্বরূপ, যখন আপনাকে শর্তসাপেক্ষে রেফারারের উপর নির্ভর করে অনুমতি দেওয়া বা অস্বীকার করা দরকার))
জে সুলিভান

29

এটি নিয়ে এসেছিল এবং এটি কমপক্ষে ফায়ারফক্স এবং অপেরা ব্রাউজারে কাজ করছে বলে মনে হচ্ছে।

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

2
জানি এবং জেফের সমাধান (একবারে সম্পাদিত) উভয়ই সঠিক এবং সমানভাবে কাজ করে; জানিকে মেনে নেওয়া কারণ তার সমাধানটি কোনও সম্পাদনা ছাড়াই সঠিকভাবে কাজ করেছে
জেফ আতউড

29
এটি কেবল তখনই কাজ করবে যদি দুটি উইন্ডো একই ডোমেনের হয়; একটি ফ্রেম থেকে পালাতে চাইলে একটি বিরল ঘটনা।
জেমস

যদি নেস্টেড ফ্রেমগুলি এতে জড়িত থাকে তবে আপনাকে ফ্রেমের শৃঙ্খলে হাঁটতে হবে এবং সমস্ত onbeforeunloadহ্যান্ডলারগুলি সরিয়ে ফেলতে হবে , কেবল শীর্ষের কোনওটি নয়!
ক্রিস্টোফ

12
গুরুত্বপূর্ণ স্পষ্টতা: এটি আমার পক্ষে কাজ করেছিল কারণ iframe src = ডায়নামিকভাবে সেট করা হয়েছিল এবং সুতরাং ক্রস-ডোমেন নীতি কার্যকর হয়নি in জেপি একদম ঠিক আছে, একটি স্ট্যাটিক src এ = এটি কাজ করবে না।
জেফ আতউড

5
ঠিক আছে এখন কেউ ফ্রেম বাস্টার বাস্টার বাস্টার বুস্টার নিয়ে আসতে পারে?
এপাগা

23

বর্তমান এইচটিএমএল 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.पातwg.org/specs/web-apps/current-work/multpage/the-iframe-element.html#attr-iframe-sandbox

এখন, আক্রমণকারী আপনার আইফ্রেমে হোস্ট করার জন্য নিম্নলিখিত কোডটি ব্যবহার করেছেন তা বিবেচনা করুন:

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

মূলত গুস্তাভ রাইডস্টেট, এলি বার্স্টেইন, ড্যান বোনেহ এবং কলিন জ্যাকসন (২০১০) প্রস্তাব করেছিলেন


19

এটি কিছুক্ষণ চিন্তা করার পরে, আমি বিশ্বাস করি এটি তাদের যারা তাদের বসকে দেখিয়ে দেবে ...

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

_topলক্ষ্য পরামিতি হিসাবে ব্যবহার করে window.open()এটি একই উইন্ডোতে চালু হবে।


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

6

আমি সাহসী হতে চলেছি এবং আমার টুপিটি এই একটিতে রিংয়ের মধ্যে ফেলে দিচ্ছি (এটি প্রাচীন হিসাবে), দেখুন আমি কয়টি ডাউনওয়েট সংগ্রহ করতে পারি।

এখানে আমার প্রয়াস, যা দেখেছি এটির যে কোনও জায়গায় কাজ করা আছে বলে মনে হয় (Chrome20, IE8 এবং এফএফ 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> রেখেছি এবং দূষিত কোডের সাথে তর্ক শুরু করার আগে আমার পৃষ্ঠাটি রেন্ডার হয়েছে কিনা তা নিশ্চিত করার জন্য আছি, ওয়াইএমএমভি এটি সেরা পন্থা কিনা তা জানেন না।

এটা কিভাবে কাজ করে?

... আমি আপনাকে জিজ্ঞাসা করতে শুনেছি - ভাল সত্যই উত্তরটি আমি দিই না । আমি যা যা পরীক্ষা করে দেখছি এটি যেখানেই কাজ করেছিল তা তৈরি করতে প্রচুর ঝোঁক লেগেছে, এবং এটির সঠিক প্রভাব আপনি কোথায় চালাচ্ছেন তার উপর নির্ভর করে কিছুটা পরিবর্তিত হয়।

এর পিছনে চিন্তাভাবনা এখানে:

  • সর্বনিম্নতম অন্তর চলতে একটি ফাংশন সেট করুন। আমি যে বাস্তববাদী সমাধানগুলি দেখেছি তার পিছনের মূল ধারণাটি ফ্রেম বাস্টার-বাস্টারের চেয়ে বেশি ইভেন্টের সাথে শিডিয়ুলার পূরণ করা।
  • প্রতিবার ফাংশনটি জ্বলতে থাকে, চেষ্টা করুন এবং উপরের ফ্রেমের অবস্থান পরিবর্তন করুন। মোটামুটি সুস্পষ্ট প্রয়োজন।
  • এছাড়াও অবিলম্বে সঞ্চালনের জন্য একটি ফাংশন নির্ধারণ করুন যা সম্পূর্ণ হতে দীর্ঘ সময় নিতে হবে (এর ফলে অবস্থান পরিবর্তনের ক্ষেত্রে হস্তক্ষেপে ফ্রেম বাস্টার-বাস্টারকে অবরুদ্ধ করে)। আমি একটি সিঙ্ক্রোনাস এক্সএমএলএইচটিপিআরকেইয়েস্টটি বেছে নিয়েছি কারণ এটিই কেবলমাত্র একমাত্র প্রক্রিয়া যা আমি ভাবতে পারি যে ব্যবহারকারীর ইন্টারঅ্যাকশন প্রয়োজন হয় না (বা কমপক্ষে জিজ্ঞাসা করতে হবে) এবং ব্যবহারকারীর সিপিইউ সময় চিবিয়ে দেয় না।

আমার http://mysite.tld/page-that-takes-a-while-to-load(এক্সএইচআর টার্গেট) এর জন্য আমি একটি পিএইচপি স্ক্রিপ্ট ব্যবহার করেছি যা দেখতে দেখতে এটি:

<?php sleep(5);

কি ঘটেছে?

  • এক্সএইচআর সম্পূর্ণ হওয়ার সময় ক্রোম এবং ফায়ারফক্স 5 সেকেন্ড অপেক্ষা করে, তারপরে সাফল্যের সাথে ফ্রেমযুক্ত পৃষ্ঠার ইউআরএলে পুনর্নির্দেশ করতে পারে।
  • IE তত্ক্ষণাত্ পুনঃনির্দেশিত করে

আপনি কি Chrome এবং ফায়ারফক্সে অপেক্ষা করার সময়টি এড়াতে পারবেন না?

দৃশ্যত না. প্রথমে আমি এক্সএইচআরটিকে একটি ইউআরএল নির্দেশ করেছিলাম যা 404 ফেরত দেয় - এটি ফায়ারফক্সে কাজ করে না। তারপরে আমি sleep(5);এই উত্তরটির জন্য যে পদ্ধতির অবশেষে অবতরণ করেছি তা চেষ্টা করেছিলাম, তারপরে আমি ঘুমের দৈর্ঘ্যটি বিভিন্ন উপায়ে খেলতে শুরু করি। আমি আচরণটির কোনও বাস্তব নিদর্শন খুঁজে পাইনি, তবে আমি এটি দেখতে পেলাম যে এটি খুব ছোট হলে বিশেষত ফায়ারফক্স বল খেলবে না (ক্রোম এবং আইআই মোটামুটি ভাল আচরণ করেছে বলে মনে হচ্ছে)। আমি জানি না "খুব সংক্ষিপ্ত" এর সংজ্ঞাটি সত্যিকার অর্থে কী, তবে 5 সেকেন্ড বলে মনে হয় প্রতিবার কাজ করে ।


যদি কোনও পাসওয়ালা জাভাস্ক্রিপ্ট নিনজরা কী চলছে তার কিছুটা ভাল ব্যাখ্যা করতে চান তবে কেন এটি (সম্ভবত) ভুল, বিশ্বাসযোগ্য নয়, সবচেয়ে খারাপ কোড তারা দেখেছে ইত্যাদি happ আমি আনন্দের সাথে শুনব।


মনে হচ্ছে আপনি আপনার সমস্ত উদ্বেগজনক বাক্যগুলি মুছে ফেলতে পারেন
এমপ্লুজন

6

২০১৫ সালের হিসাবে, আপনার এটির frame-ancestorsজন্য সিএসপি 2 এর নির্দেশিকা ব্যবহার করা উচিত । এটি একটি HTTP প্রতিক্রিয়া শিরোনামের মাধ্যমে প্রয়োগ করা হয়।

যেমন

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

অবশ্যই, অনেক ব্রাউজার এখনও সিএসপি 2 সমর্থন করে না তাই পুরাতন শিরোনামটি অন্তর্ভুক্ত করা বুদ্ধিমানের X-Frame-Options:

X-Frame-Options: DENY

আমি যাইহোক উভয়কেই অন্তর্ভুক্ত করার পরামর্শ দেব, অন্যথায় আপনার সাইটটি পুরানো ব্রাউজারগুলিতে ক্লিকজ্যাকিং আক্রমণে ঝুঁকিপূর্ণ হতে থাকবে এবং অবশ্যই আপনি দূষিত অভিপ্রায় ছাড়াই অনাকাঙ্ক্ষিত ফ্রেমিং পাবেন। বেশিরভাগ ব্রাউজারগুলি আজকাল স্বয়ংক্রিয়ভাবে আপডেট হয়, তবে আপনি এখনও কর্পোরেট ব্যবহারকারীদের লিগ্যাসি অ্যাপ্লিকেশন সামঞ্জস্যতার কারণে ইন্টারনেট এক্সপ্লোরারের পুরানো সংস্করণে আটকে থাকতে চান।


1
সমস্ত বড় ব্রাউজার এখন সিএসপি সমর্থন করে। এটিই 2019 এর সঠিক উত্তর এবং ভবিষ্যতের ভবিষ্যত।
স্টিফেন আর

5

ঠিক আছে, সুতরাং আমরা জানি যে একটি ফ্রেমে ছিল। সুতরাং আমরা জিইটি ভেরিয়েবল হিসাবে পাথের সাথে অন্য একটি বিশেষ পৃষ্ঠায় অবস্থান করছি। আমরা এখন ব্যবহারকারীকে কী চলছে তা ব্যাখ্যা করব এবং একটি লক্ষ্য = "_ টপ" বিকল্পের সাথে একটি লিঙ্ক সরবরাহ করব। এটি সহজ এবং সম্ভবত কাজ করবে (এটি পরীক্ষা করে দেখেনি) তবে এর জন্য কিছু ব্যবহারকারীর ইন্টারঅ্যাকশন প্রয়োজন। হয়তো আপনি ব্যবহারকারীর কাছে আপত্তিকর সাইটটি নির্দেশ করে এবং আপনার সাইটে ক্লিক জ্যাকারদের লজ্জার একটি হল তৈরি করতে পারেন .. কেবল একটি ধারণা, তবে এটি রাতের কাজ ..


5

প্রস্তাবিত সমস্ত সমাধান সরাসরি উপরের উইন্ডোর অবস্থান পরিবর্তন করতে বাধ্য করে। যদি কোনও ব্যবহারকারী ফ্রেমটি সেখানে থাকতে চান? উদাহরণস্বরূপ অনুসন্ধান ইঞ্জিনগুলির চিত্রের ফলাফলের শীর্ষ ফ্রেম।

আমি একটি প্রোটোটাইপ লিখেছিলাম যেখানে ডিফল্টরূপে সমস্ত ইনপুট (লিঙ্ক, ফর্ম এবং ইনপুট উপাদান) অক্ষম থাকে এবং / অথবা সক্রিয় হওয়ার সময় কিছুই করে না।

যদি একটি সমন্বিত ফ্রেম সনাক্ত করা হয় তবে ইনপুটগুলি অক্ষম রেখে দেওয়া হবে এবং পৃষ্ঠার শীর্ষে একটি সতর্কতা বার্তা প্রদর্শিত হবে। সতর্কতা বার্তায় একটি লিঙ্ক রয়েছে যা একটি নতুন উইন্ডোতে পৃষ্ঠার একটি নিরাপদ সংস্করণ খুলবে। এটি পৃষ্ঠাটি ক্লিকজ্যাকিংয়ের জন্য ব্যবহার হতে বাধা দেয়, তবুও ব্যবহারকারীকে অন্যান্য পরিস্থিতিতে সামগ্রীগুলি দেখার অনুমতি দেয়।

যদি কোনও সমন্বিত ফ্রেম সনাক্ত না করা হয় তবে ইনপুটগুলি সক্ষম হয়।

কোডটি এখানে। আপনাকে নিরাপদ মানগুলিতে মানক এইচটিএমএল বৈশিষ্ট্যগুলি সেট করতে হবে এবং আসল মানগুলিতে অ্যাডিটোনাল বৈশিষ্ট্য যুক্ত করতে হবে। এটি সম্ভবত অসম্পূর্ণ এবং সম্পূর্ণ সুরক্ষার জন্য অতিরিক্ত বৈশিষ্ট্যগুলি (আমি ইভেন্ট হ্যান্ডলারগুলি সম্পর্কে ভাবছি) সম্ভবত একইভাবে চিকিত্সা করতে হবে:

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

এর সাথে সমস্যা হ'ল ফ্রেম-নির্মাতা পজিশনটি ব্যবহার করতে পারে: আপনার নিষ্ক্রিয় বোতামগুলির উপরে সক্রিয় বোতামটি লাগানোর জন্য নিখুঁত এবং ব্যবহারকারী কেবল আপনার ওয়েবপৃষ্ঠাটি দেখতে পাবে এবং ভাবেন যে তারা আপনার বোতামগুলি ক্লিক করছে।
jmucchiello

সতর্কতা বার্তাটি এখনও প্রদর্শিত হবে, তবে অবশ্যই আপনার পরামর্শ অনুসারে নিরাপদ পৃষ্ঠার লিঙ্কটি কভার করা সহজ। তবে যদি আপনি কেবল পৃষ্ঠাটি অনুলিপি করতে এবং একই প্রভাব অর্জন করতে পারেন তবে আমার পরিচিত ফ্রেমে লোকেদের ক্লিক করতে লোককে পেতে আমার পৃষ্ঠার ফ্রেমিংয়ের সমস্ত সমস্যার মধ্য দিয়ে কেন? উপরের কোডটি মূলত ক্লিক জ্যাকিং প্রতিরোধ করে। আপনি যদি আমার পৃষ্ঠাকে অদৃশ্যভাবে অন্য পৃষ্ঠার উপরে দেখান তবে আমার সাইটে ক্রিয়াকলাপ করা সম্ভব নয়।
জোহান স্টুয়েটস

এটি কোনও আইই 8 সীমাবদ্ধ জোন ফ্রেম বা ক্রোম স্যান্ডবক্স ফ্রেমে রাখলে জাভাস্ক্রিপ্ট কখনই চলবে না। আমি অবাক হই যে এই ক্ষেত্রেগুলিতে কী কী সংশোধন প্রয়োজন
গুডগুইজ_একটিভেট 18

4

ঠিক আছে, আপনি কাউন্টারটির মানটি সংশোধন করতে পারেন তবে এটি অবশ্যই একটি ভঙ্গুর সমাধান। আপনি সাইটটি কোনও ফ্রেমের মধ্যে নেই - এটি কোনও দুর্দান্ত সমাধানের পরেও নির্ধারণ করার পরে আপনি আপনার কন্টেন্টটি এজেএক্সের মাধ্যমে লোড করতে পারেন তবে এটি আশা করি পূর্বেই লোড ইভেন্টে গুলি চালানো এড়ানো হবে (আমি ধরে নিচ্ছি)।

সম্পাদনা: অন্য ধারণা। যদি আপনি সনাক্ত করেন যে আপনি কোনও ফ্রেমে আছেন তবে ব্যবহারকারীকে জাভাস্ক্রিপ্ট নিষ্ক্রিয় করতে বলুন, এমন কোনও লিঙ্কে ক্লিক করার আগে যা আপনাকে কাঙ্ক্ষিত ইউআরএলে নিয়ে যায় (এমন একটি ক্যোরিস্ট্রিং যা আপনার পৃষ্ঠাটি ব্যবহারকারীকে জানাতে দেয় যে তারা একবার জাভাস্ক্রিপ্ট পুনরায় সক্ষম করতে পারে) সেখানে আছে).

সম্পাদনা 2: পারমাণবিক যান - যদি আপনি সনাক্ত করেন যে আপনি কোনও ফ্রেমে আছেন, কেবল আপনার নথির বডি সামগ্রী মুছুন এবং কিছু বাজে বার্তা মুদ্রণ করুন।

3 সম্পাদনা করুন: আপনি শীর্ষ নথিকে গণনা করতে এবং সমস্ত ফাংশন নাল (এমনকি বেনামেও) সেট করতে পারেন?


আউটলুক (পূর্বে হটমেল) 'পারমাণবিক হয়' যদি এটি কোনও ফ্রেম থেকে বেরিয়ে না আসতে পারে - এটি <body>কোনও <plaintext>ট্যাগের অভ্যন্তরের পুরো সামগ্রীটি সেট করে display: none। এটি বেশ কার্যকর।
uınbɐɥs

4

আপনি যদি বাস্টার কোডের ঠিক পরে একটি সতর্কতা যুক্ত করেন তবে সতর্কতা জাভাস্ক্রিপ্ট থ্রেডটিকে স্টল করবে এবং এটি পৃষ্ঠাটি লোড হতে দেবে। স্ট্যাকওভারফ্লো এটিই করে এবং এটি আমার আইফ্রেমগুলি থেকে বেরিয়ে আসে, এমনকি আমি ফ্রেম বুস্টিং বাস্টার ব্যবহার করি। এটি আমার সাধারণ পরীক্ষার পৃষ্ঠাতেও কাজ করেছিল। এটি কেবল উইন্ডোজের ফায়ারফক্স 3.5 এবং আই 7 তে পরীক্ষা করা হয়েছে।

কোড:

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

3

আমি মনে করি আপনি প্রায় সেখানে ছিলেন। আপনি চেষ্টা করেছেন:

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

বা, বিকল্পভাবে:

window.parent.prevent_bust = 0;

দ্রষ্টব্য: আমি আসলে এটি পরীক্ষা করিনি।


1
আমি আপনার কোড নমুনা সম্পাদনা করেছি (পিতামাতার জন্য পরীক্ষা ব্যর্থ হয়েছে বলে মনে হচ্ছে) তবে সম্পাদিত সংস্করণটি কাজ করছে বলে মনে হচ্ছে!
জেফ আতউড

1
কুল। অনির্ধারিত কোড সহ উত্তর দেওয়া সর্বদা কৌতূহলপূর্ণ - আমি কমপক্ষে ধারণাটি পাওয়ার জন্য এটি করি - এবং দরিদ্র প্রশ্নকর্তাকে ডিবাগ করতে দিন। :)
জেফ মিটবল ইয়াং

12
অভিভাবকরা অন্য কোনও ডোমেনে থাকলে কাজ করবে না, সম্ভবত এটিই সম্ভব!
জোশ স্টোডোলা

2

বার্সার পাশাপাশি বারবার কল করার কী আছে? এটি একটি প্রতিযোগিতার শর্ত তৈরি করবে, তবে কেউ আশা করতে পারে যে বুস্টারটি শীর্ষে আসবে:

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

2

যদি আপনি ফিরে আসা মানগুলি লক্ষ্য করেন setInterval()তবে সেগুলি সাধারণত একক অঙ্ক হয়, তাই আপনি সাধারণত কোনও একক লাইনের কোডের মাধ্যমে এই জাতীয় সমস্ত বাধা অক্ষম করতে পারেন:

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

2

আমি কেবল স্রেফ ফ্রেম বাস্টার বুস্টার জাভাস্ক্রিপ্ট বুস্ট করার জন্য একটি উপায় পেয়েছি। আমার জাভাস্ক্রিপ্ট ফাংশনে getElementsByName ব্যবহার করে, আমি ফ্রেম বাস্টার এবং প্রকৃত ফ্রেম বাস্টার বুস্টার স্ক্রিপ্টের মধ্যে একটি লুপ সেট করেছি। এই পোস্টটি দেখুন। http://www.phcityonweb.com/frame-buster-buster-buster-2426


0

সেটআইন্টারওয়াল এবং সেটটাইমআউট একটি স্বয়ংক্রিয়ভাবে ইনক্রিমেন্টিং ইন্টারভাল তৈরি করে। প্রতিবার সেটটাইমআউট বা সেটইন্টারওয়াল বলা হয়, এই সংখ্যাটি একের পর এক চলে যায়, যাতে আপনি যদি সেটটাইমআউট কল করেন তবে আপনি বর্তমানের সর্বোচ্চ মান পাবেন।

   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 একযোগে সেট ইন্টার্নারওয়ালস এবং সেটটাইমআউট কাজ করা প্রায় শোনা যায় না এবং যেহেতু সেটটাইমআউট "শেষ অন্তর বা টাইমআউট তৈরি +1" তৈরি করে, এবং যেহেতু শীর্ষস্থানীয় ক্লিয়ারিয়েন্টটারভাল এখনও অ্যাক্সেসযোগ্য তাই এটি ব্ল্যাক-হ্যাট আক্রমণগুলিকে ফ্রেম হিসাবে পরাজিত করবে উপরে বর্ণিত ওয়েবসাইটগুলি।


0

হাই-জ্যাকিং ফ্রেমসেট, আইফ্রেমে এবং চিত্রগুলির মতো কোনও সামগ্রী এড়াতে এইচটিএক্সেস ব্যবহার করুন।

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

এটি প্রত্যাশার পরিবর্তে একটি কপিরাইট পৃষ্ঠা প্রদর্শন করবে।


এটি রেফারারের উপর নির্ভর করে যা ক) সর্বদা সেট করা থাকে না (ব্রাউজার সেটিংস বা এক্সটেনশনের কারণে বা কেবল কারণ উল্লেখযোগ্য পৃষ্ঠাটি ব্যবহার না করে <meta name="referrer" …/>এবং বি বি ব্যবহার করে এইচটিটিপিএস ব্যবহার করে ) লিঙ্কগুলিতে ক্লিক করার সময়ও সেট করে থাকে, তাই আপনি নিজের পৃষ্ঠায় লিঙ্কগুলিও বারণ করেন এবং বিরতি পান ওয়েব.
মার্টিন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.