Iframe पर 'X-Frame-Options' कैसे सेट करें?


170

अगर मैं ऐसा बनाऊं iframe:

var dialog = $('<div id="' + dialogId + '" align="center"><iframe id="' + frameId + '" src="' + url + '" width="100%" frameborder="0" height="'+frameHeightForIe8+'" data-ssotoken="' + token + '"></iframe></div>').dialog({

मैं त्रुटि को कैसे ठीक कर सकता हूं:

'https://www.google.com.ua/?gws_rd=ssl'एक फ्रेम में प्रदर्शित करने से इनकार कर दिया क्योंकि यह 'SAMEORIGIN' के लिए 'X- फ्रेम-विकल्प' सेट करता है।

जावास्क्रिप्ट के साथ?

जवाबों:


227

आप X-Frame-Optionsपर सेट नहीं कर सकते iframe। यह डोमेन द्वारा निर्धारित प्रतिक्रिया शीर्षलेख है जिसमें से आप संसाधन का अनुरोध कर रहे हैं ( google.com.uaआपके उदाहरण में)। उन्होंने SAMEORIGINइस मामले में हेडर को सेट किया है , जिसका अर्थ है कि उन्होंने iframeअपने डोमेन के बाहर संसाधन लोड करना बंद कर दिया है। अधिक जानकारी के लिए एमडीएन पर एक्स-फ्रेम-ऑप्शन्स प्रतिक्रिया हेडर देखें।

हेडर का त्वरित निरीक्षण (क्रोम डेवलपर टूल में यहां दिखाया गया है) X-Frame-Optionsमेजबान से लौटाए गए मूल्य का खुलासा करता है।

यहां छवि विवरण दर्ज करें


7
YouTube के साथ, आप समापन बिंदु URL को "एम्बेड" संस्करण में बदल सकते हैं। देखें stackoverflow.com/questions/25661182/… (मुझे पता है कि यह सख्ती से ओपी के लिए खोज नहीं है, लेकिन Google इस परिणाम को पहले देता है!)

73

X-Frame-Optionsएक हेडर है जो अनुरोध करने के लिए प्रतिक्रिया में शामिल है यदि डोमेन अनुरोध खुद को एक फ्रेम के भीतर प्रदर्शित करने की अनुमति देगा। इसका जावास्क्रिप्ट या HTML से कोई लेना-देना नहीं है और इसे अनुरोध के प्रवर्तक द्वारा नहीं बदला जा सकता है।

इस वेबसाइट ने इस शीर्षलेख को यह प्रदर्शित करने के लिए अस्वीकृत करने के लिए सेट किया है iframe। इस व्यवहार को रोकने के लिए क्लाइंट कुछ भी नहीं कर सकता है।

आगे एक्स-फ्रेम-ऑप्शंस पर पढ़ना


यह प्रतिक्रिया हेडर में सेट है, हेडर का अनुरोध नहीं। लेकिन अन्यथा सटीक व्याख्या!
निकंग

2
@ निकंग का मेरा यही मतलब है, हालाँकि मैं मानता हूँ कि शब्दावली स्पष्ट नहीं थी। मैंने इसे किसी भी भ्रम को दूर करने के लिए संपादित किया है। धन्यवाद।
रोरी मैकक्रॉन

31

यदि आप उस सर्वर के नियंत्रण में हैं जो आईफ्रेम की सामग्री भेजता है तो आप X-Frame-Optionsअपने वेबसर्वर में सेटिंग सेट कर सकते हैं ।

अपाचे को कॉन्फ़िगर करना

सभी पृष्ठों के लिए X- फ़्रेम-विकल्प शीर्ष लेख भेजने के लिए, इसे अपनी साइट के कॉन्फ़िगरेशन में जोड़ें:

Header always append X-Frame-Options SAMEORIGIN

Nginx को कॉन्फ़िगर करना

एक्स-फ्रेम-ऑप्शन हेडर भेजने के लिए नेग्नेक्स को कॉन्फ़िगर करने के लिए, इसे या तो अपने http, सर्वर या स्थान विन्यास में जोड़ें:

add_header X-Frame-Options SAMEORIGIN;

कोई विन्यास नहीं

यह शीर्ष लेख विकल्प वैकल्पिक है, इसलिए यदि विकल्प बिल्कुल सेट नहीं है, तो आप इसे अगले उदाहरण से कॉन्फ़िगर करने का विकल्प देंगे (जैसे आगंतुक ब्राउज़र या एक प्रॉक्सी)

स्रोत: https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options


इससे मुझे मदद मिली। मैं इन दो पंक्तियों पर टिप्पणी करता हूं: add_header Strict-Transport-Security "max-age=86400; includeSubdomains"; add_header X-Frame-Options DENY;नग्नेक्स-स्निपेट्स से, और फिर इसने सीधे काम किया।
जेथ

NGINX, यह कहना महत्वपूर्ण है कि अंदर, स्थान कहाँ है ?
पीटर क्रूस २१'१

पीटर क्रुस, आप क्या चाहते हैं?
रूबों 7

14

चूंकि समाधान वास्तव में सर्वर साइड के लिए उल्लिखित नहीं था:

किसी को इस तरह की चीजों को सेट करना होगा (उदाहरण के लिए अपाचे), यह सबसे अच्छा विकल्प नहीं है क्योंकि यह सब कुछ में अनुमति देता है, लेकिन जब आप अपने सर्वर को सही ढंग से काम करते देखते हैं तो आप आसानी से सेटिंग्स बदल सकते हैं।

           Header set Access-Control-Allow-Origin "*"
           Header set X-Frame-Options "allow-from *"

5

वास्तव में नहीं ... मैंने उपयोग किया

 <system.webServer>
     <httpProtocol allowKeepAlive="true" >
       <customHeaders>
         <add name="X-Frame-Options" value="*" />
       </customHeaders>
     </httpProtocol>
 </system.webServer>

यह एक समाधान जैसा दिखता है, लेकिन क्या यह सुरक्षा भंग है?
योगर्टु

1
यह नहीं आपकी साइट के लिए अक्षम एक ही मूल नीति के लिए एक अच्छा विचार है, जब तक आप जानते हैं कि वास्तव में आप क्या कर रहे हैं। आपको सामग्री एम्बेड करने के लिए अपने से भिन्न डोमेन की अनुमति नहीं देनी चाहिए। कोडेक अकादमी . com/articles/what - is - cors और समान ट्यूटोरियल देखें ।
स्लैक


2

एक्स फ़्रेम-विकल्पों HTTP प्रतिक्रिया हेडर से संकेत मिलता है या नहीं, एक ब्राउज़र एक में एक पृष्ठ प्रदर्शित करने के लिए अनुमति दी जानी चाहिए इस्तेमाल किया जा सकता <frame>, <iframe>या <object>। साइटें क्लिकजैकिंग हमलों से बचने के लिए इसका उपयोग कर सकती हैं, यह सुनिश्चित करके कि उनकी सामग्री अन्य साइटों में एम्बेड नहीं की गई है।

अधिक जानकारी के लिए: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options

मेरे पास इस समस्या का एक वैकल्पिक समाधान है, जिसे मैं PHP का उपयोग करके प्रदर्शित करने जा रहा हूं:

iframe.php:

<iframe src="target_url.php" width="925" height="2400" frameborder="0" ></iframe>

target_url.php:

<?php 
  echo file_get_contents("http://www.example.com");
?>

5
क्या यह लोड होने के बाद पृष्ठ का उपयोग करने के लिए एक व्यवहार्य समाधान है? क्या मैं जन्मजात भार के बाद पृष्ठों के साथ बातचीत कर पाऊंगा? क्या लोड होने के बाद सामग्री का उपयोग करने के लिए डोमेन के लिए प्रत्येक अनुरोध को अनुमानित नहीं किया जाएगा?
टिमोथी गोंजालेज 20

0

इस प्रयोजन के लिए आपको अपने अपाचे या आपके द्वारा उपयोग की जाने वाली किसी अन्य सेवा में स्थान का मिलान करना होगा

अगर आप अपाचे का इस्तेमाल कर रहे हैं तो httpd.conf फाइल में।

  <LocationMatch "/your_relative_path">
      ProxyPass absolute_path_of_your_application/your_relative_path
      ProxyPassReverse absolute_path_of_your_application/your_relative_path
   </LocationMatch>

0

समाधान एक ब्राउज़र प्लगइन स्थापित करना है।

एक वेब साइट जो HTTP हैडर X-Frame-Optionsको DENY(या SAMEORIGINकिसी भिन्न सर्वर उत्पत्ति के) मान के साथ जारी करती है, उसे IFRAME में एकीकृत नहीं किया जा सकता है ... जब तक कि आप इस व्यवहार को एक ब्राउज़र प्लगइन स्थापित करके नहीं बदलते हैं, जो X-Frame-Optionsहेडर को अनदेखा करता है (जैसे Chrome की उपेक्षा X- फ़्रेम हेडर) )।

ध्यान दें कि यह सुरक्षा कारणों से बिल्कुल भी अनुशंसित नहीं है।


0

यदि आप इस तरह से iframe में लोड करना चाहते हैं, तो आप वेब साइट के x- फ्रेम-विकल्प को सेट कर सकते हैं

<httpProtocol>
    <customHeaders>
      <add name="X-Frame-Options" value="*" />
    </customHeaders>
  </httpProtocol>

अगर मैं स्टैकओवरफ़्लो खोलना चाहता हूँ, तो मुझे वेब कॉन्फ़िगर कहाँ मिल सकता है? क्या यह सर्वर साइड के लिए नहीं है?
इरुम ज़हरा

-1

आप वास्तव में अपने HTML निकाय में x-iframe नहीं जोड़ सकते क्योंकि यह साइट के स्वामी द्वारा प्रदान किया जाना है और यह सर्वर नियमों के अंतर्गत है।

आप संभवतः जो कर सकते हैं वह एक PHP फ़ाइल बनाता है जो लक्ष्य URL की सामग्री को लोड करता है और उस URL को iframe करता है, यह आसानी से काम करना चाहिए।


1
"आप शायद" तब इसे एक टिप्पणी के रूप में पोस्ट कर सकते हैं यदि इसका उत्तर नहीं है
एमके

क्या होगा अगर यह एमके का जवाब देता है
सुशांत चौधरी

फिर यह एक सुझाव है कि काम किया है, एक विशिष्ट समाधान नहीं है, इसलिए इसे एक टिप्पणी के रूप में रखा जाना चाहिए
एमके

-2

आप इसे टॉमकैट इंस्टेंस लेवल कॉन्फिगर फाइल (web.xml) में कर सकते हैं। web.xml config फाइल में 'फिल्टर' और 'फिल्टर-मैपिंग' को जोड़ने की जरूरत है। यह सभी पृष्ठ में [X- फ्रेम-विकल्प = DENY] जोड़ देगा क्योंकि यह एक वैश्विक सेटिंग है।

<filter>
        <filter-name>httpHeaderSecurity</filter-name>
        <filter-class>org.apache.catalina.filters.HttpHeaderSecurityFilter</filter-class>
        <async-supported>true</async-supported>
        <init-param>
          <param-name>antiClickJackingEnabled</param-name>
          <param-value>true</param-value>
        </init-param>
        <init-param>
          <param-name>antiClickJackingOption</param-name>
          <param-value>DENY</param-value>
        </init-param>
    </filter>

  <filter-mapping> 
    <filter-name>httpHeaderSecurity</filter-name> 
    <url-pattern>/*</url-pattern>
</filter-mapping>

-3

यदि आप xml दृष्टिकोण का अनुसरण कर रहे हैं, तो नीचे कोड काम करेगा।

    <security:headers>
        <security:frame-options />
        <security:cache-control />
        <security:content-type-options />
        <security:xss-protection />
    </security:headers>
<security:http>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.