跨站脚本攻击(XSS)是一种常见的Web安全漏洞,攻击者通过在网页中注入恶意脚本,当其他用户浏览该页面时,脚本会在用户浏览器中执行,可能导致会话劫持、信息窃取等安全问题。
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:; style-src 'self' 'unsafe-inline';";
add_header X-Frame-Options "SAMEORIGIN";
X-XSS-Protection
: 启用浏览器内置的XSS过滤器X-Content-Type-Options
: 防止MIME类型嗅探攻击Content-Security-Policy
: 定义允许加载资源的来源X-Frame-Options
: 防止点击劫持# 阻止常见的XSS攻击向量
set $xss "";
if ($request_uri ~* "(<|%3C).*script.*(>|%3E)") {
set $xss "1";
}
if ($request_uri ~* "javascript:") {
set $xss "${xss}1";
}
if ($request_uri ~* "vbscript:") {
set $xss "${xss}1";
}
if ($request_uri ~* "alert\(") {
set $xss "${xss}1";
}
if ($request_uri ~* "document\.cookie") {
set $xss "${xss}1";
}
if ($xss = "11111") {
return 403;
}
# 只允许GET和POST方法
if ($request_method !~ ^(GET|POST)$ ) {
return 405;
}
location ~* \.(php|jsp|cgi|pl|py|asp|aspx|sh|cgi)$ {
return 403;
}
# 在Nginx中集成ModSecurity
modsecurity on;
modsecurity_rules_file /etc/nginx/modsec/main.conf;
location / {
access_by_lua_block {
local xss = require "resty.xss"
local ok, err = xss.scan(ngx.var.request_uri)
if not ok then
ngx.log(ngx.ERR, "XSS attack detected: ", err)
return ngx.exit(ngx.HTTP_FORBIDDEN)
end
}
# 其他配置...
}
server {
listen 80;
server_name example.com;
# 安全头设置
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options "nosniff";
add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src 'self' data:; style-src 'self' 'unsafe-inline';";
add_header X-Frame-Options "SAMEORIGIN";
add_header Referrer-Policy "no-referrer-when-downgrade";
# XSS过滤
set $xss "";
if ($request_uri ~* "(<|%3C).*script.*(>|%3E)") { set $xss "1"; }
if ($request_uri ~* "javascript:") { set $xss "${xss}1"; }
if ($request_uri ~* "vbscript:") { set $xss "${xss}1"; }
if ($request_uri ~* "alert\(") { set $xss "${xss}1"; }
if ($request_uri ~* "document\.cookie") { set $xss "${xss}1"; }
if ($xss = "11111") { return 403; }
# 限制HTTP方法
if ($request_method !~ ^(GET|POST)$ ) {
return 405;
}
location / {
# 其他配置...
proxy_pass http://backend;
}
# 记录XSS尝试
error_log /var/log/nginx/xss_error.log;
}
通过以上Nginx配置策略,可以显著提高网站对XSS攻击的防御能力,但需注意这应与应用层的安全措施配合使用,形成纵深防御体系。