xss漏洞防御方法
csp 安全策略
csp介绍: W3C组织还针对XSS攻击制定了一个叫做CSP的安全层,也就是内容安全策略(ContentSecurity Policy)。它的出现是为了帮助检测和缓解某些类型的攻击,比如跨站脚本(XSS)和数据注入等攻击,从而引入的浏览器策略。开发者可以根据CSP的规范,去创建一些很严格的规则,比如说白名单策略,管理网站允许加载的内容。当网站加载了非预期的内容,浏览器会及时阻止并且上报,减少出现安全风险时的损失。
防御原理:
<meta charset="utf-8"> <?php //只允许加载本地源图片: header("Content-Security-Policy:img-src 'self' "); ?> //允许加载所有源下的图片 <meta http-equiv="Content-Security-Policy" content="img-src*;"> //加载的是一张我随意百度的图片 <img src="https://www.baidu.com/img/24lianghui_3fa64faa4dd8496d4ab2a1d411a93dad.gif"/>
当你加入了header("Content-Security-Policy:img-src 'self' ");内容时,他会禁止你访问外部链 接,既然你不能访问外部链接就不会访问到攻击者指定的地址去
我们可以看到图片不能加载,除此之外,我们在网络模块中,可以看到响应头中的确出现了安全政策。 当我们把header("Content-Security-Policy:img-src 'self' ");注释掉的时候,就可以发现图片可以加载了
我们可以通过指令添加更多的规则
csp指令:
- default-src : 定义针对所有类型(js/image/css/font/ajax/iframe/多媒体等)资源的默认加载策略,如果某类型资源没有单独定义策略,就使用默认的。
- script-src : 定义针对JavaScript 的加载策略。
- style-src : 定义针对样式的加载策略。
- img-src : 定义针对图片的加载策略。
- font-src : 定义针对字体的加载策略。
- media-src : 定义针对多媒体的加载策略,例如:音频标签和视频标签。
- object-src : 定义针对插件的加载策略
- child-src :定义针对框架的加载策略
- connect-src : 定义针对 Ajax/WebSocket 等请求的加载策略。不允许的情况下,浏览器会模拟一 个状态为400的响应。
- sandbox : 定义针对 sandbox 的限制,相当于 的sandbox属性。
- report-uri : 告诉浏览器如果请求的资源不被策略允许时,往哪个地址提交日志信息。
- form-action : 定义针对提交的 form 到特定来源的加载策略。
- referrer : 定义针对 referrer 的加载策略。
- reflected-xss:定义针对XSS过滤器使用策略。
指令值 | 说明 |
* | 允许加载任何内容 |
‘none’ | 不允许加载任何内容 |
‘self’ | 允许加载相同源的内容 |
www.a.com | 允许加载指定域名的资源 |
*.a.com | 允许加载a.com任何子域名的资源 |
https://a.com | 允许加载a.com的https资源 |
https: | 允许加载https资源 |
data: | 允许加载data:协议,例如:base64编码的图片 |
‘unsafe-inline’ | 允许加载inline资源,例如style属性、onclick、inlinejs、inlinecss等 |
unsafe-eval | 允许加载动态js代码,例如eval() |
httponly安全策略
httponly介绍: 跨站点脚本(XSS)攻击通常旨在窃取会话cookie。在这种攻击中,cookie值由使用JavaScript (document.cookie)的客户端脚本访问。然而,在日常使用中,Web应用程序很少需要通过JavaScript 访问cookie。因此,设计了一种保护cookie免受此类盗窃的方法:一个标志,告诉Web浏览器 cookie只能通过HTTP访问-HttpOnly标志。
设置httponly: setcookie('name','xielaoshi',['httponly'=>true]); 当我们设置好之后,我们可以在浏览器发现
此时httponly表示就是开启状态,这个时候你是无法用document.cookie获取到cookie的,所 以利用xss漏洞获取cookie就失效