防嵌入
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-Options
或CSP
的补充,而不是替代