CSP(内容安全策略)学习

今天在一段 PHP 验证码代码中包含了以下内容,怀着好奇的心里研究了一下~

header(“Content-Security-Policy: default-src ‘self’; style-src ‘self’ ‘unsafe-inline’; img-src ‘self’ data:; frame-src ‘none’”);
header(“X-Content-Security-Policy: default-src ‘self’; style-src ‘self’ ‘unsafe-inline’; img-src ‘self’ data:; frame-src ‘none’”);
header(“X-WebKit-CSP: default-src ‘self’; style-src ‘self’ ‘unsafe-inline’;img-src ‘self’ data:; frame-src ‘none’”);
header(“X-XSS-Protection: 1; mode=block”);
header(“X-Content-Type-Options: nosniff”);
header(“X-Frame-Options: DENY”);

我们来先说一下CSP, 内容安全策略 (CSP, Content Security Policy) 是一个附加的安全层,用于帮助检测和缓解某些类型的攻击,包括跨站脚本 (XSS) 和数据注入等攻击。 这些攻击可用于实现从数据窃取到网站破坏或作为恶意软件分发版本等用途。

Content-Security-Policy

这个字段表示内容安全策略,也就是大名鼎鼎的 CSP ,主要是定义页面可以加载哪些资源,减少 XSS 的发生。

Content-Security-Policy 由一组指令+指令值对组成。目前的所有指令值可以参考这里,这里仅仅对上面的栗子给出说明:

default-src ‘self’; 表示所有资源(js、image、css、web font,ajax)的默认加载策略是同源的。

style-src ‘self’ ‘unsafe-inline’; 表示 css 的加载策略是同源和行内css。

img-src ‘self’ data:; 表示 css 加载策略是同源和data协议。

frame-src ‘none’ 表示不允许加载frame

X-Content-Security-Policy

这个字段的作用同 Content-Security-Policy,早期的 Chrome 是通过 X-WebKit-CSP 响应头来支持 CSP 的,而 firefox 和 IE 则支持 X-Content-Security-Policy,Chrome25 和 Firefox23 开始支持标准的 Content-Security-Policy。

X-WebKit-CSP

X-WebKit-CSP 是早期 Chrome 和 Safari 支持的,作用同上。

X-XSS-Protection

X-XSS-Protection: 1; mode=block 主要是控制 IE8+ 和 Webkit browsers 浏览器开启 XSS 防护功能,阻止反射型 XSS 呈现页面,并不会清理 XSS。

X-Content-Type-Options

X-Content-Type-Options: nosniff 禁用浏览器的类型猜测行为,也就是说Content-Type是错的或者未定义的时候,不会解析执行响应内容。

X-Frame-Options

X-Frame-Options 用来给浏览器指示允许一个页面可否在frame , iframe 或者object 中展现的标记。DENY 表示不允许被陷入到其他 frame /iframe 中。

题外话

差了些相关资料,发现前端果然很乱啊,一种功能在不同的浏览器中有不同的实现形式。。。


为您推荐了相关的技术文章:

  1. BlackHat 2016 回顾之 JNDI 注入简单解析
  2. unserialize() 实战之 vBulletin 5.x.x 远程代码执行
  3. Rasp 技术介绍与实现
  4. Python Waf黑名单过滤下的一些Bypass思路 - Mosuan's Blog
  5. MS17-010漏洞检测与内网穿透技术的应用 | 浮萍的个人空间

原文链接: www.evilclay.com