跳到主要内容

防嵌入

2024年03月20日
柏拉文
越努力,越幸运

一、认识


防嵌入 就是说通过一些操作, 防止别人通过 Iframe 嵌入我们的页面。

二、X-Frame-Options


X-Frame-Options 是一个HTTP响应头,用于控制网页是否允许被嵌套在iframe中。可以设置以下三个值之一:

  • DENY: 表示页面不能被任何iframe嵌套。

  • SAMEORIGIN: 表示只能由同源域名下的页面嵌套。

  • ALLOW-FROM uri: 表示页面可以被指定的源uri嵌套。

add_header X-Frame-Options SAMEORIGIN always;

三、Content Security Policy (CSP)


Content Security Policy (CSP) 是一个更为强大的网页安全策略,它不仅可以防止页面被嵌套,还可以帮助预防各种类型的攻击,例如XSS攻击。你可以通过设置frame-ancestors指令来指定哪些页面可以嵌套当前页面

Content-Security-Policy: frame-ancestors 'self' https://chat.baidu.com http://mirror-chat.baidu.com https://fj-chat.baidu.com https://hba-chat.baidu.com https://hbe-chat.baidu.com https://njjs-chat.baidu.com https://nj-chat.baidu.com https://hna-chat.baidu.com https://hnb-chat.baidu.com http://debug.baidu-int.com;

四、window.top !== window.self


可以通过JavaScript来阻止页面被嵌套。这个方法的思路是检测当前页面是否为顶级窗口,如果不是,则可以将其重定向到顶级窗口。一个简单的实现如下:

if (window.top !== window.self) {
window.top.location = window.location;
}

这种方法并不是绝对安全的,因为有可能被一些高级的攻击手段绕过。它应该作为X-Frame-OptionsCSP的补充,而不是替代