Appearance
防止XSS攻击
防止XSS(跨站脚本)攻击,保护用户安全。
基本防护
安全头
nginx
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;禁止内联脚本
nginx
location ~* \.(html|htm)$ {
if ($args ~* "<script") {
return 403;
}
}完整配置
XSS防护
nginx
server {
listen 80;
server_name www.example.com;
root /var/www/html;
# 安全头
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Content-Security-Policy "default-src 'self'" always;
# 禁止内联脚本
location ~* \.(html|htm)$ {
if ($args ~* "<script") {
return 403;
}
try_files $uri $uri/ =404;
}
}CSP(内容安全策略)
基本CSP
nginx
add_header Content-Security-Policy "default-src 'self'" always;完整CSP
nginx
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:; connect-src 'self'; frame-src 'self';" always;CSP指令说明
default-src
- 默认资源加载策略
- 'self':仅允许同源
script-src
- 脚本加载策略
- 'unsafe-inline':允许内联脚本
style-src
- 样式加载策略
- 'unsafe-inline':允许内联样式
img-src
- 图片加载策略
- data::允许data URL
常见XSS攻击模式
脚本注入
nginx
if ($args ~* "<script") {
return 403;
}事件注入
nginx
if ($args ~* "onerror|onload|onclick") {
return 403;
}JavaScript伪协议
nginx
if ($args ~* "javascript:") {
return 403;
}完整示例
生产环境配置
nginx
server {
listen 80;
server_name www.example.com;
root /var/www/html;
# 安全头
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self' data:; connect-src 'self'; frame-src 'self';" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
# XSS防护
location ~* \.(html|htm)$ {
if ($args ~* "<script|onerror|onload|onclick|javascript:") {
return 403;
}
try_files $uri $uri/ =404;
}
}常见问题
正常脚本被拦截
原因: CSP策略过于严格
解决: 调整CSP策略
nginx
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'" always;XSS攻击未拦截
原因: 正则表达式不完整
解决: 添加更多XSS模式
nginx
if ($args ~* "<script|onerror|onload|onclick|javascript:") {
return 403;
}总结
防止XSS攻击的关键点:
- 安全头:X-Frame-Options、X-Content-Type-Options、X-XSS-Protection
- CSP:内容安全策略
- 禁止内联脚本:过滤script标签
- 禁止事件:过滤onerror、onload等事件
- 禁止JavaScript伪协议:过滤javascript:
合理配置XSS防护,保护用户安全。