1 X-Frame-Options(点击劫持)
1.1 定义
**点击劫持(ClickJacking)**劫持的是用户的鼠标点击操作,劫持目标是含有重要会话交互的页面,如银行交易页面、后台管理页面等;
场景: 就比如通过修改偏移量,比如一个关闭按钮,有可能底下覆盖的是一个关注按钮
HTTP响应头信息中的X-Frame-Options,可以指示浏览器是否应该加载一个iframe中的页面。如果服务器 响应头信息中没有X-Frame-Options,则该网站存在ClickJacking攻击风险。网站可以通过设置X- Frame-Options阻止站点内的页面被其他页面嵌入从而防止点击劫持。
- 限制当前页面以frame或者iframe的方式引用
1.2 选项
1、DENY:不能被嵌入到任何iframe或者frame中。
2、SAMEORIGIN:页面只能被本站页面嵌入到iframe或者frame中,域名+端口一致可以引用
3、ALLOW-FROM uri:只能被嵌入到指定域名的框架中 apache可配置http.conf如下:
1.3 nginx配置
- 需要添加到 ‘http’, ‘server’ 或者 ‘location’ 的配置项中,个人来讲喜欢配置在‘server’ 中
add_header X-Frame-Options SAMEORIGIN;
# 正常情况下都是使用SAMEORIGIN参数,允许同域嵌套
add_header X-Frame-Options SAMEORIGIN;
# 允许多个域名iframe嵌套,注意这里是用逗号分隔
add_header X-Frame-Options "ALLOW-FROM http://whsir.com/,https://cacti.org.cn/";
1.4 建议配置
add_header X-Frame-Options SAMEORIGIN;
2. Cookie没有设置HttpOnly
- 不让js操作cookie
3. cookie里的secure属性
3.1 简介
cookie的secure标志是一个选项,当应用服务器在http响应中向用户发送新cookie时,可以设置该选项 secure标志,目的是防止未经授权的方由于以明文形式传输cookie而获取到cookie。 为了实现这个目标, 支持secure标志的浏览器只会在请求转到https页面时发送带有secure标志的cookies。换句话说,浏览器 不会在未加密的http请求上发送设置了安全标志的cookie。 通过设置secure标志,浏览器将可以阻止通过 未加密通道传输cookie。 Secure属性是说如果一个cookie被设置了Secure=true,那么这个cookie只能用https协议发送给服务 器,用http协议是不发送的。换句话说,cookie是在https的情况下创建的,而且他的Secure=true,那么 之后你一直用https访问其他的页面(比如登录之后点击其他子页面),cookie会被发送到服务器,你无需重 新登录就可以跳转到其他页面。但是如果这是你把url改成http协议访问其他页面,你就需要重新登录了,因 为这个cookie不能在http协议中发送。
3.2 建议设置
- 在nginx配置文件中可以使用proxy_cookie_path属性实现
proxy_cookie_path / "/; Path=/; Secure;";
4. HTTP Referrer-Policy
4.1 定义
https://blog.csdn.net/john1337/article/details/53665684
- referrer是HTTP请求header的报文头,用于指明当前流量的来源参考页面;通过这个信息,我们可以知道访客是怎么来到当前页面的。这对于Web Analytics非常重要,可以用于分析不同渠道流量分布、用户搜索的关键词等。Referrer Policy即引用策略,就是从一个页面发出请求时,是否在请求头部定义 Referrer 的设置。很多网站的防盗链机制都是用头部定义 Referrer 来判断是否是盗链。referer有可能会泄露隐私,带来安全上的问题
4.2 选项
-
“no-referrer”
: 整个
Referer
首部会被移除。访问来源信息不随着请求一起发送。 -
“no-referrer-when-downgrade”
,: :如果未设置referfer-policy,则会默认设置浏览器的预设值;在安全降级请求(https->hhtp),不发送请求头;跨源的请求,referer只包含源;同源请求: referer包含完整的url;建议设置成这个,防止因为浏览器变更预设值 -
“origin”
, 在任何情况下,仅发送文件的源作为引用地址。例如 https://example.com/page.html 会将 https://example.com/ 作为引用地址。 -
“origin-when-cross-origin”
: 对于同源的请求,
会发送完整的URL作为引用地址
,但是对于非同源请求仅发送文件的源。 -
“same-origin
“:对于
同源的请求
会发送引用地址,但是对于非同源请求则不发送引用地址信息。 -
“strict-origin”:
在同等安全级别的情况下,发送文件的源作为引用地址(HTTPS->HTTPS),但是在降级的情况下不会发送 (HTTPS->HTTP)。 -
“strict-origin-when-cross-origin”
: 对于同源的请求,会发送完整的URL作为引用地址;在同等安全级别的情况下,发送文件的源作为引用地址(HTTPS->HTTPS);在降级的情况下不发送此首部 (HTTPS->HTTP)。chrome85改成了这个 -
“unsafe-url”
:全部都发送Referrer信息。最宽松最不安全的策略。
4.3 建议设置
Referer Policy: strict-origin-when-cross-origin
5 Content-Security-Policy(网页安全政策)
5.1 简介:
-
允许站点管理者控制用户代理能够为指定的页面加载哪些资源
-
利用CSP来防止XSS攻击,CSP实质上就是白名单制度,实现与执行由浏览器来完成。
-
启动CSP的方式:
Content-Security-Policy
-
第二种: 通过meta标签
<meta http-equiv="Content-Security-Policy" content="script-src 'self'; object-src 'none'; style-src cdn.example.org third-party.org; child-src https:"> <!-- 脚本:只信任当前域名 <object>标签:不信任任何URL,即不加载任何资源 样式表:只信任cdn.example.org和third-party.org 框架(frame):必须使用HTTPS协议加载 其他资源:没有限制 -->
-
启动后,
不符合CSP的外部资源就会被阻止掉
。
5.2 资源加载限制
script-src:外部脚本
style-src:样式表
img-src:图像
media-src:媒体文件(音频和视频)
font-src:字体文件
object-src:插件(比如 Flash)
child-src:框架
frame-ancestors:嵌入的外部资源(比如<frame>、<iframe>、<embed>和<applet>)
connect-src:HTTP 连接(通过 XHR、WebSockets、EventSource等)
worker-src:worker脚本
manifest-src:manifest 文件
5.3 建议设置
Content-Security-Policy: default-src 'self'
6 X-Permitted-Cross-Domain-Policies
6.1 简介
用于指定当不能将“crossdomain.xml”文件(当需要从别的域名中的某个文件中读取Flash内容时用于进行必要设置的策略文件)放置在网站根目录等场合时采取的替代策略
6.2 设置值
none :目标服务器上的任何位置(包括该主策略文件)均不允许使用策略文件。
master-only: 只允许使用主策略文件(/crossdomain.xml)
by-content-type: 仅允许Content-Type:text/x-cross-domain-policy提供的策略文件(只适用于HTTP/HTTPS)。
by-ftp-filename :仅允许文件名为crossdomain.xml的策略文件。(只适用于FTP)
all:允许此目标域中所有的策略文件。
6.3 建议配置
add_header X-Permitted-Cross-Domain-Policies ' master-only';
7 X-XSS-Protection
7.1 简介
X-XSS-Protection
头被用来设置浏览器提供的 XSS Filter 的状态,XSS Filter 可以用来对抗大部 分
反射型 XSS 漏洞
; 用于启用浏览器的 XSS 过滤功能,以防止 XSS 跨站脚本攻击.浏览器提供的XSS保护机制并不完美,但是开启后仍然可以提升攻击难度,总之没有特别的理由,不要关闭它。只对IE8和Safir浏览器生效。
7.2 可选值
0: 禁用 XSS Filter;
1: 启动;当发现反射型 XSS 攻击时,浏览器将自动清理攻击代码
1; mode=block,启用 XSS Filter,当发现反射型 XSS 攻击时, 浏览器将停止渲染当前页面 1; report=http://xxx.com/,当发现反射型 XSS 攻击时,浏览器将自动清 理攻击代码,并将攻击情况反馈到 http://xxx.com/(例如IE8中,检查到攻击时,整个页面会被一个#替换)
X-XSS-Protection: 1; report=<reporting-uri>: 启用XSS过滤。 如果检测到跨站脚本攻击,浏览器将清除页面并使用CSP report-uri (en-US)指令的功能发送违规报告。
7.3 建议设置
X-XSS-Protection: 1; mode=block
8 X-Download-Options
8.1 定义
用于放置直接打开用户下载文件,
noopen
用于指定IE 8以上版本的用户不打开文件而直接保存文件。在下载对话框中不显示“打开”选项。
8.2 建议配置
X-Download-Options: noopen
9. X-Content-Type-Options
9.1 简介
- 浏览器会根据响应头的Content-Type字段来分辨它们的类型。例如:”text/html”代表html文档,”image/png”是PNG图片,”text/css”是CSS样式文档。然而,有些资源的Content-Type是错的或者未定义。这时,某些浏览器会启用MIME-sniffing来猜测该资源的类型,解析内容并执行。设置为nosniff这个响应头则可以禁用浏览器的类型猜测行为
9.2 建议设置
add_header X-Content-Type-Options 'nosniff';