阅读 85

HTTP security

Content-Security-Policy (CSP)内容安全策略

CSP的主要目标是减少和报告XSS攻击

参考链接

developer.mozilla.org/zh-CN/docs/…

例子

网页展示一张线上图片,没有设置CSP之前图片显示正常;

<img src="https://t7.baidu.com/it/u=1819248061,230866778&fm=193&f=GIF" />
复制代码
  • 设置 default-src 'self',图片显示异常
 <meta http-equiv="Content-Security-Policy" content="default-src 'self'">
复制代码
Refused to load the image 'https://t7.baidu.com/it/u=1819248061,230866778&fm=193&f=GIF' 
because it violates the following Content Security Policy directive: "default-src 'self'". 
Note that 'img-src' was not explicitly set, so 'default-src' is used as a fallback
复制代码
  • 设置default-src 'self' 和 img-src *, 图片显示正常
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; img-src *;">
复制代码

HTTP Public Key Pinning(HPKP)

HTTP公钥锁定(HPKP)是一种安全功能,它告诉web客户端将特定加密公钥与某个web服务器相关联,以降低使用伪造证书进行MITM攻击的风险。

Web服务器第一次通过特殊的HTTP标头(Public-Key-Pins)告诉客户端哪些公钥属于它,客户端会在给定的时间段内存储此消息,当客户端再次访问服务器时,它希望证书链中至少有一个证书包含一个公钥,其指纹已通过HPKP已知。如果服务器提供未知的公钥,则客户端应向客户发出警告。

中间人攻击(Man-in-the-MiddleAttack 简称MITM)

通过截取正常的网络通信数据,并进行数据篡改和嗅探,而通信的双方却毫不知情。

HTTP Strict Transport Security(HSTS)

HSTS是一个安全功能,它告诉浏览器只能通过HTTPS访问当前资源,而不是HTTP

我们为什么要使用HSTS

有的网站开启了https,但为了照顾用户的使用体验(因为用户总是很懒的,一般不会主动键入https,而是直接输入域名,直接输入域名,默认就是http访问)同时也支持http访问,当用户http访问的时候,就会返回给用户一个302重定向,重定向到https的地址, 然后后续的访问都使用https传输,这种通信模式看起来没有问题,但细致分析,就会发现这种通信模式也存在一个风险,那就是302重定向可能会被劫持篡改, 可能被改成一个恶意的或者钓鱼的https站点。

对于篡改302的攻击,建议服务器开启http Strict Transport Security功能。

HSTS 含义

当用户已经安全的访问开启过HSTS功能的网站(支持HSTS功能的站点会在响应头中插入:Strict-Transport-Security)之后,支持HSTS的浏览器会自动将这个域名加入到HSTS列表,下次及时用户使用http访问这个网站,支持HSTS功能的浏览器就会自动发送https请求,而不是先发送http,再重定向到https,这样就能避免中途的302重定向URL被篡改,进一步提高通信的安全性。

HSTS的不足

用户首次访问某个网站是不受HSTS保护的。这是因为首次访问时,浏览器还未收到HSTS,所以仍有可能通过明文HTTP来访问。解决这个不足目前有两个方案,一是浏览器预置HSTS域名列表; 二是将HSTS信息加入到域名系统记录中。

HTTP Cookies

X-Content-Type-Options

X-Content-Type-Options HTTP消息头相当于一个提示标记,被服务器用来提示客户端一定要遵循在Content-Type首部对MIME类型的设定,而不是对其进行修改。这就禁用了客户端的 MIME类型嗅探行为

X-Frame-Options

X-Frame-Options HTTP响应头是用来给浏览器指示允许一个页面 可否在frame 、 iframe、embed、object中展示的标记。站点可以通过确保网站没有被嵌入到别人的站点里面,从而避免clickjacking攻击。

  • deny 表示页面不允许在frame中展示,即使是在相同域名的页面中嵌套也不允许。
  • sameOrigin 表示页面可以在相同域名域名的frame中展示。
  • allow-from uri 表示页面可以在指定来源的frame中展示。

var ele = document.createElement('frame')
ele.setAttribute('style',"width:100vw; height:100vh; background:red;z-index:1000;")
document.body.append(ele)
ele.setAttribute('src', 'https://www.baidu.com')

chrome-error://chromewebdata/:1 
Refused to display 'https://www.baidu.com/' in a frame because it set 'X-Frame-Options' to 'sameorigin'.
复制代码

clickjacking 点击劫持

点击劫持也叫做界面操作劫持、UI-覆盖攻击。

界面操作劫持攻击实际上是一种基于视觉欺骗的web会话劫持攻击,核心在于使用了标签中的透明属性,他通过在网页的可见输入空间上覆盖一个不可见的框,使得用户误以为在操作可见控件,而实际上用户的操作行为被不可见的框所劫持,执行不可见框中的恶意代码,达到窃取信息,控制会话,植入木马等目的。

因为首先劫持的是用户的鼠标点击操作,所以命名叫点击劫持。主要劫持目标是含有重要会话交互的页面,如银行交易页面、后台管理页面等。

X-XSS-Protection

当检测到跨站脚本攻击(XSS)时,浏览器将停止加载页面。

文章分类
前端
文章标签