2011-05-04 68 views
17

最近,我的完整網站被兩個其他域調用iframe。我想阻止其他網站,他們試圖在iframe中顯示我的網站。如何阻止Iframe調用

我該如何通過.htaccess阻止?

回答

-3

恩,我不認爲你可以。

iframe是客戶端容器,這意味着最終用戶瀏覽器負責在iframe中加載內容。您無法分辨您的頁面是否加載到iframe中。

+1

這是不正確的。您可以通過JavaScript檢查網頁是否爲「頂部」。 'window.top ===窗口'。 – 2012-10-13 05:25:00

3

我不認爲你可以通過.htaccess,但你可以使用JS。您可以使用像這樣的功能來檢查:

function parentIsSameOrigin() 
{ 
    var result = true; 
    if (window.parent) 
    { 
     result = Boolean 
     (
      // more precise modifications needed here 
      window.this.location.href.indexOf(window.parent.location.href) == 0 
     ); 
    } 
    return result; 
} 
+1

嗯......但是如果JavaScript在客戶端的瀏覽器上被禁用呢? – 2012-12-17 13:34:03

+0

沒有其他辦法,如果這是一個合理的問題,我會加載使用JS的Iframe的內容,除非函數驗證,否則不顯示任何內容。 – udjamaflip 2012-12-17 22:31:12

+0

你可以隨時把display:none放入css中,並用javascript將其刪除。如果用戶禁用JavaScript(這對於現代標準是不可接受的),它會強制不顯示內容。 – dtakis 2015-04-14 23:58:43

55

您可以在標題X-Frame-Options:Deny中設置變量。

所有現代瀏覽器都支持X-Frame-Options標頭。

Facebook使用此標頭禁用iframe/framesets(也是Javascript)。

如果啓用了Apache mod_headers中的:

的.htaccess

Header set X-Frame-Options DENY 

但是,您可以啓用I幀來自同一來源。

Header always append X-Frame-Options SAMEORIGIN 

或者在Nginx的:

add_header X-Frame-Options Deny; #or SAMEORIGIN 

瀏覽器兼容性:Source

  • 的Internet Explorer:8.0
  • 火狐(壁虎):3.6.9(1.9.2.9)
  • Opera:10.50
  • Safari瀏覽器:4.0
  • 鉻:4.1.249.1042
+1

我認爲,這是最好的方式。另一種適當的方式是使用php:header(「X-Frame-Options:SAMEORIGIN」)... js或引用者毫無意義 – emfi 2014-01-15 14:46:23

+0

注意:Header指令位於mod_headers apache模塊中。您需要確保該模塊已加載到Apache服務器中。 https://stackoverflow.com/a/19510208/2042775 – sj59 2017-08-03 09:57:13

0

可以用.htaccess爲以下

RewriteEngine On 

RewriteCond %{QUERY_STRING} !^id=[^&]+ [NC] 
# if referrer is bad.com 
RewriteCond %{HTTP_REFERER} (www\.)?bad\.com [NC] 
# then redirect to a different page 
RewriteRule !^404.shtm [L,NC,R=302] 

您將需要依靠HTTP_REFERER這個這個代碼將任何請求重定向從壞.COM的頁面未找到

這個解決方案促成了這一答案

https://stackoverflow.com/a/19773719/1641233

1

由於存在解決方法,您不能「執行」它,但可以使用標準標頭方法。 html5-boilerplate有一個很好的虛擬主機/ htaccess片段,首先設置X-Frame-Options作爲您的DENY/SAMEORIGIN/ALLOW-FROM的選擇,然後允許白名單MIME類型用於良好的框架,如Google圖片搜索。

檢查鏈接,最新的,但這裏是從2016年1月25日的例子SAMEORIGIN模式:

<IfModule mod_headers.c> 

    Header set X-Frame-Options "SAMEORIGIN" 

    <FilesMatch "\.(appcache|atom|bbaw|bmp|crx|css|cur|eot|f4[abpv]|flv|geojson|gif|htc|ico|jpe?g|js|json(ld)?|m4[av]|manifest|map|mp4|oex|og[agv]|opus|otf|pdf|png|rdf|rss|safariextz|svgz?|swf|topojson|tt[cf]|txt|vcard|vcf|vtt|webapp|web[mp]|webmanifest|woff2?|xloc|xml|xpi)$"> 
     Header unset X-Frame-Options 
    </FilesMatch> 

</IfModule>