什么是xss
Cross-Site Scripting(跨站脚本攻击)简称xss,是一种代码注入攻击,攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行,利用这些恶意脚本,攻击者可以获取用户的敏感信息,如Cookie、sessionID等,进而危害数据安全。
xss分类
- 存储型XSS
- 将恶意代码提交到目标网站的数据库中,用户打开网站时,服务器将恶意代码从数据库中取出,拼接在HTML中返回给浏览器
- 反射型XSS
- 攻击者构造出特殊的URL,其中包含恶意代码,用户打开时,服务器将恶意代码从URL中取出,拼接在HTML中返回给浏览器
- DOM型XSS
- 攻击者构造出特殊的URL,其中包含恶意代码,用户打开时,前端javascript取出URL中的恶意代码并执行
XSS的预防
- 输入过滤
- 前端进行过滤无意义,攻击者可直接构造请求绕开前端提交恶意代码
- 后端写入数据库前对输入进行过滤,内容不确定会被输出到哪里,不同的位置所需的编码不同,会引入很大的不确定性和乱码问题
- 转义应该在输出HTML时进行
- 预防存储型和反射型xss攻击
- 纯前端渲染
- 转义HTML
- 预防DOM型xss攻击
- 在使用
.innerHTML.outerHTMLdocument.write()时不要把不可信的数据作为HTML插到页面中,而尽量使用.textContent.setAttribute()等
- 在使用
- 其他防范措施
- 禁止记载外域代码,防止复杂的攻击逻辑
- 禁止外域提交,网站被攻击后,用户的数据不会泄露到外域
- 输入内容长度控制
- 验证码
- HTTP-only Cookie禁止js读取某些敏感cookie
- 扫描工具自动检测XSS漏洞
什么是CSRF
CSRF(Cross-site request forgery)跨站请求伪造:攻击者诱导受害者进入第三方网站,子第三方网站中,向被攻击网站发送跨站请求,利用受害者在被攻击网站已经获取的注册凭证,绕过后台的用户验证,达到冒充用户对被攻击网站执行某项操作的目的。
几种常见的攻击类型
GET类型的CSRF、POST类型的CSRF、链接类型的CSRF
防护策略
-
阻止不明外域的访问
- 同源检测。利用origin Header 和 Referer Header判断
- samesite cookie。兼容性较差
-
提交时要求附加本域才能获取的信息
- CSRF Token。①服务器随机生成token,存储在session/redis中,每次请求带上,进行校验,但存在性能问题。②token是一个计算出来的结果,无需再去读取存储的token,只需再次计算进行校验
- 双重Cookie验证。在请求的URL中拼接cookie参数。
-
其他防范措施
- CSRFTester测试
- CSRF监控