怎么防止WordPress等网站被别人使用iframe框架恶意调用?

最近发现了一个网站竟然直接使用iframe引用了全站,包括腾讯云的全站,已经通知了腾讯云的运营,运营的答复是会通过司法途径尝试去解决。个人是不可能这么干了,太麻烦,但是我也联系了该网站所在的网安进行监督处理,不知道是什么结果,有结果了再说吧

既然说到了怎么防止 iframe 框架恶意调用,那我们就应该知道什么是 iframe 框架,就是我们常用的 iframe 标签:<iframe>

iframe 元素会创建包含另外一个文档的内联框架(即行内框架),我们可以在我们自己的网站页面加载别人网站或者本站其他页面的内容经常会用到,比如后台常见的厂字型UI框架,并且所有浏览器都支持 <iframe> 标签

其他的不多说了,如果需要了解的话可以看看W3C或者菜鸟教程,下面开始正题,怎么防止 iframe 框架恶意调用?

js版本

<script type="text/javascript">
        if (self!=top){
            window.top.location.replace(self.location);
        }
</script>

WordPress网站可以加在footer.php中,其他网站也可以加在底部

WordPress版本

function break_out_of_frames() {
    if (!is_preview()) {
        echo "\n<script type=\"text/javascript\">";
        echo "\n<!--";
        echo "\nif (parent.frames.length > 0) { parent.location.href = location.href; }";
        echo "\n-->";
        echo "\n</script>\n\n";
    }
}
add_action('wp_head', 'break_out_of_frames');

上面两种其实都是JS版本的,这样使用是没有问题的,但是当你使用WordPress后台自定义编辑的时候,就会跳转,很烦人,你也可以做一下优化,判断是不是你的域名,如果是就不使用

下面说一下通过修改 X-Frame-Options 响应头的方式

X-Frame-Options 有三个值:

DENY

表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许

SAMEORIGIN

表示该页面可以在相同域名页面的 frame 中展示

Allow-From [uri]

表示该页面可以在指定来源的 frame 中展示

换一句话说,如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为 SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套

PHP版本

<?php header('X-Frame-Options:Deny'); ?>

WordPress网站放到主题模板header.php文件中的标签前

Apache服务器

配置 Apache 在所有页面上发送 X-Frame-Options 响应头,需要把下面这行添加到 ‘site’ 的配置中:

Header always append X-Frame-Options SAMEORIGIN

在 Apache 主机的 httpd.conf 文件中加上这句后重启生效

.htaccess 方法

Header append X-FRAME-OPTIONS "SAMEORIGIN"

在网站根目录下的 .htaccess 文件中加上这句就可以了

Nginx服务器

配置 Nginx 发送 X-Frame-Options 响应头,把下面这行添加到 ‘http’,’server’ 或者 ‘location’ 的配置中:

add_header X-Frame-Options SAMEORIGIN;

重启生效

IIS服务器

配置 IIS 发送 X-Frame-Options 响应头,添加下面的配置到 Web.config 文件中:

<system.webServer>
  ...

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

  ...
</system.webServer>

这样就o98k了,可能有些浏览器兼容性问题,问题不大

2 条评论

发表评论

*