如何在Apache、Nginx和WordPress中实现CSP frame-ancestors?
通过实施CSP(内容安全策略)头部,保护您的网站免受点击劫持攻击
CSP是OWASP十大安全头部之一,通常被安全专家或工具推荐实施。有许多选项可用于构建策略,以强制执行您希望公开的Web资源的方式。
其中一个被称为frame-ancestors
的指令在CSP版本2中引入,与frame-ancestors
相比,该指令提供了更大的灵活性,能够以与X-Frame-Options相同的方式允许或禁止使用iframe、frame、object、embed和applet元素嵌入资源。
我认为当CSP与所有主要浏览器完全兼容时,X-Frame-Options将很快过时。截至目前,CSP frame-ancestors支持所有最新的浏览器版本,除了IE。
我不知道微软何时将在IE上提供支持。您可以随时在Can I Use site上检查浏览器的兼容性。
让我们看一下以下的实施步骤。
Apache HTTP
在Apache中注入任何头部都需要先决条件mod_headers
。根据操作系统和版本的不同,但如果您使用的是Ubuntu和Apache 2.4,则可以使用a2enmod headers
来启用它。
root@yaoweibin:/etc/apache2# a2enmod headers
Enabling module headers.
To activate the new configuration, you need to run:
systemctl restart apache2
root@yaoweibin:/etc/apache2# systemctl restart apache2
root@yaoweibin:/etc/apache2#
注意:您可以在httpd.conf
文件或您正在使用的任何有效配置文件中进行所有配置。
拒绝所有
与X-Frame-Options DENY类似。如果您不希望任何网站(包括自己)进行嵌入,则添加以下内容。
Header set Content-Security-Policy "frame-ancestors 'none';"
保存文件并重新启动Apache HTTP以生效。
我尝试嵌入网站,正如您所见,它被阻止了。
允许自己,但拒绝他人
与X-Frame-Options SAMEORIGIN类似,您可以添加以下内容。
Header set Content-Security-Policy "frame-ancestors 'self';"
允许自己和多个域名
X-Frame-Options没有选项允许多个域名。感谢CSP,您可以按如下方式执行。
Header set Content-Security-Policy "frame-ancestors 'self' 'yaoweibin.com' 'gf.dev' 'yaoweibin.dev';"
上述代码将允许从自己、yaoweibin.com、gf.dev和yaoweibin.dev嵌入内容。将这些域名更改为您自己的域名。
Nginx
与Apache HTTP部分中解释的概念和指令相同,只是添加头部的方式不同。在Nginx中,头部应添加在相应配置文件的server
块下。
拒绝所有
add_header Content-Security-Policy "frame-ancestors 'none';";
拒绝所有,但不拒绝自己
add_header Content-Security-Policy "frame-ancestors 'self';";
允许多个域名
add_header Content-Security-Policy "frame-ancestors 'yoursite.com' 'example.com';";
上面的示例将允许在yoursite.com和example.come上嵌入内容。更改完成后,不要忘记重启Nginx服务器以测试策略。
WordPress
这取决于您如何托管WordPress。
如果您使用的是自托管的云端或VPS,那么您可能正在使用像Apache或Nginx这样的网络服务器。如果是这样的话,您可以按照上述提到的方法在网络服务器上实施,而不是在WordPress上实施。然而,如果您在shared hosting上或无法访问修改网络服务器,则可以利用插件。
要在WordPress中实施CSP,您可以使用Content Security Policy Pro plugin。
验证
完成实施后,您可以使用浏览器内置的开发者工具或链接_6来进行验证。
结论
CSP是一种强大的措施,用于防止网络漏洞。我希望上述说明能指导您如何在Apache和Nginx中实施frame-ancestors。