漏洞名称:iFrame注入
风险描述:系统未设置x-frame-options头
风险等级:低
整改建议:为系统添加x-frame-options头
知识
X-Frame-Options 响应头
X-Frame-Options HTTP 响应头是用来给浏览器指示允许一个页面可否在 <frame>, <iframe> 或者 <object> 中展现的标记。网站可以使用此功能,来确保自己网站的内容没有被嵌到别人的网站中去,也从而避免了点击劫持 (clickjacking) 的攻击。
X-Frame-Options 有三个值:
DENY
表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
SAMEORIGIN
表示该页面可以在相同域名页面的 frame 中展示。
ALLOW-FROM uri
表示该页面可以在指定来源的 frame 中展示。
换一句话说,如果设置为 DENY,不光在别人的网站 frame 嵌入时会无法加载,在同域名页面中同样会无法加载。另一方面,如果设置为 SAMEORIGIN,那么页面就可以在同域名页面的 frame 中嵌套。
实际修改内容
在nginx的location下添加漏洞处理的内容。
遇到的问题:
1 直接在http或者server下添加设置没有生效,原因未知
2 系统的组成B内嵌到A中,A的域名为xxxx.com,B的域名为xxxx.com:19111,将 x-frame-options 设置为SAMEORIGIN之后,不能正常跳转。修改了配置 将xxxx.com:19111转为为二级域名xxxx.com/yjsPreview,才能被认为是同一个域名下。
3 设置 x-frame-options 设置为SAMEORIGIN之后,在请求中有重复的x-frame-options,添加了设置 proxy_hide_header x-frame-options,先取消之前已经有的设置;
server {
listen 80;
server_name 192.168.0.2
charset utf-8;
client_max_body_size 50M;
#允许跨域访问
# 指定允许跨域的方法,*代表所有
add_header Access-Control-Allow-Methods *;
# 预检命令的缓存,如果不缓存每次会发送两次请求
add_header Access-Control-Max-Age 3600;
# 不带cookie请求,并设置为false
add_header Access-Control-Allow-Credentials false;
# $http_origin动态获取请求客户端请求的域 不用*的原因是带cookie的请求不支持*号
#add_header Access-Control-Allow-Origin $http_origin;
add_header Access-Control-Allow-Origin *;
# 表示请求头的字段 动态获取
add_header Access-Control-Allow-Headers $http_access_control_request_headers;
location / {
#root html;
proxy_pass http://192.168.0.3:18001/;
#index index.html index.htm;
proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header Host $host;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
#add_header 'Access-Control-Allow-Origin' '*' always;
#add_header 'Access-Control-Allow-Credentials' 'true' always;
#add_header 'Access-Control-Allow-Methods' 'POST,GET,OPTIONS' always;
#add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type' always;
fastcgi_buffers 8 1280k;
send_timeout 600;
#低微漏洞处理20231225,为系统添加x-frame-options头
proxy_hide_header x-frame-options;
add_header x-frame-options "SAMEORIGIN";
#低微漏洞处理20231225,为系统Cookie设置secure属性
add_header Set-Cookie "Secure";
}
#代理kkfileview
location /yjsPreview/ {
#root html;
proxy_pass http://kkfileview_server/;
#index index.html index.htm;
proxy_
location /yjsFileReport/ {
#root html;
proxy_pass http://fine_server/;
#index index.html index.htm;
proxy_set_header X-Real-IP $remote_addr;
#proxy_set_header Host $host;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Credentials' 'true' always;
add_header 'Access-Control-Allow-Methods' 'POST,GET,OPTIONS' always;
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type' always;
#低微漏洞处理20231225,为系统添加x-frame-options头
proxy_hide_header x-frame-options;
add_header x-frame-options "SAMEORIGIN";
#低微漏洞处理20231225,为系统Cookie设置secure属性
add_header Set-Cookie "Secure";
}
error_page 500 502 503 504 /50x.html;
}