web 安全
跨站脚本攻击XSS
简介
Cross-Site Scripting(跨站脚本攻击)简称 XSS,是一种代码注入攻击。攻击者通过在目标网站上注入恶意脚本,使之在用户的浏览器上运行。利用这些恶意脚本,攻击者可获取用户的敏感信息如 Cookie、SessionID 等,进而危害数据安全。
原理
危害
- 获取页面数据
- 获取cookie
- 改变页面逻辑
- 发送请求
- 获取用户数据 获取用户登录态
分类
类型 | 位置 | 危害 |
---|---|---|
存储型 | URL | 大 |
反射型 | 后端数据库 | 小 |
反射型
http://xxx/search?keyword=
使用短网址伪装
存储型
textarea 直接输入脚本
XSS攻击注入点
- HTML节点内容
- HTML属性
- js代码
- 富文本
防御
浏览器自动拦截 X-XSS-Protection
X-XSS-Protection
顾名思义,这个响应头是用来防范XSS的。最早我是在介绍IE8的文章里看到这个,现在主流浏览器都支持,并且默认都开启了XSS保护,用这个header可以关闭它。它有几种配置:
0:禁用XSS保护;
1:启用XSS保护;
1; mode=block:启用XSS保护,并在检查到XSS攻击时,停止渲染页面(例如IE8中,检查到攻击时,整个页面会被一个#替换);
浏览器提供的XSS保护机制并不完美,但是开启后仍然可以提升攻击难度,总之没有特别的理由,不要关闭它。
PHP设置
header(“X-XSS-Protection: 1”);
function htmlEscape(text) {
return text.replace(/[<>"&]/g, function(match, pos, originalText) {
switch (match) {
case "<":
return "<";
case ">":
return ">";
case "&":
return "&";
case "\"":
return """;
}
});
}
json.Stringify()
富文本
白名单 黑名单 cheerio xss
CSP 内容安全策略