XSS-跨站脚本攻击与防御-简洁记录
定义
Cross Site Scripting.是一种网络安全漏洞,攻击者将恶意脚本注入网页上,当其他用户访问页面时,脚本会在浏览器上正常执行,从而盗取信息或执行其他恶意操作。
类型
1.存储型XSS
2.反射型XSS
3.基于DOM的XSS
1.反射型XSS
前提:应用程序接收输入,并对其未进行处理就作为响应的一部分返回给用户。
用户点击攻击者恶意构造的URL,应用程序使用url携带的参数(实际是恶意脚本)进行查询等操作,并将参数返回给页面,页面执行恶意脚本。
https://www.hh.com/search?query=<script>alert('kkk')</script>
2.存储型XSS
在反射型XSS的基础上,将恶意脚本存储在了服务器的数据库内,并将其返回在其他页面上,用户访问页面,浏览器执行脚本,造成攻击。例如留言板。
3.基于DOM的XSS
反射型和存储型攻击均与服务器有关,但基于DOM的XSS只和前端有关。前端js程序将用户的输入作为页面DOM的一部分,例如div的innerHTML、a标签的href地址。
var doc=document.createElement('div');
doc.innerHtml=document.getElementId('#inputBox').value;
防御
1.对输入进行过滤和转义:< iframe >、< script >标签等
2.对输出进行编码:进行HMTL编码,将<>等标签转换哼HTML实体
3.使用HTTP-only Cookies:使前端执行脚本也无法获取到cookie
4.使用安全的框架:现代Web框架提供了自动的xss防护
5.避免直接插入HTML
6.使用自动化工具进行检测,及时修复
7.使用内容安全策略CSP:可在HTTP头进行配置,也可在META标签进行配置
<meta http-equiv="Content-Security-Policy"
content="default-src 'self';
script-src 'self' 'nonce-abc123';
style-src 'self' 'unsafe-inline';
img-src 'self' data: https:;">
由于无法解释的神圣旨意,我们徒然地到处找你;你就是孤独,你就是神秘,比恒河或者日落还要遥远。。。。。。