点击劫持(Clickjacking)是一种恶意技术,攻击者通过透明层或iframe诱使用户在不知情的情况下点击看似无害的页面元素,实际上却在执行恶意操作。以下是保护Linux服务器上Web接口免受点击劫持攻击的综合方案:
这是最基本的防护措施,告诉浏览器是否允许页面在frame中显示:
# Apache配置
Header always set X-Frame-Options "SAMEORIGIN"
# Nginx配置
add_header X-Frame-Options "SAMEORIGIN";
可选值:
- DENY
:完全禁止在frame中加载
- SAMEORIGIN
:只允许同源frame加载
- ALLOW-FROM uri
:允许指定来源的frame加载
更现代的替代方案,提供更细粒度的控制:
# Apache配置
Header always set Content-Security-Policy "frame-ancestors 'self'"
# Nginx配置
add_header Content-Security-Policy "frame-ancestors 'self'";
header('X-Frame-Options: SAMEORIGIN');
header("Content-Security-Policy: frame-ancestors 'self'");
if (top != self) {
top.location = self.location;
}
<style id="antiClickjack">body{display:none !important;}</style>
<script>
if (self === top) {
var antiClickjack = document.getElementById("antiClickjack");
antiClickjack.parentNode.removeChild(antiClickjack);
} else {
top.location = self.location;
}
</script>
限制iframe使用:
HTTPS强制实施:
# Apache
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
# Nginx
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload";
定期安全审计:
防御层面 | 措施 |
---|---|
传输层 | HTTPS加密 |
协议层 | X-Frame-Options/CSP头 |
应用层 | CSRF令牌, Frame Busting JS |
会话层 | 短会话超时, 敏感操作重新认证 |
使用以下方法测试防护是否生效: 1. 创建测试HTML页面尝试iframe你的网站 2. 使用浏览器开发者工具检查响应头 3. 使用在线安全头检查工具 4. 使用自动化测试工具如Selenium验证防护
通过实施这些措施,您可以显著降低Web接口遭受点击劫持攻击的风险,保护用户和系统安全。