可我们总发着光">
【XSS】XSS(一)
xss原理:
XSS 的本质在于 Web 应用程序对用户输入数据的“信任过度”和“输出处理不当”。攻击者利用这一点,将恶意的 JavaScript 代码(或能够触发脚本执行的 HTML 标签/属性) 作为输入数据提交给 Web 应用。当应用在未对这些输入进行充分净化(Sanitization)和转义(Escaping) 的情况下,直接将它们输出到其他用户的浏览器页面中时,这些恶意脚本就会被受害者的浏览器解析并执行。
xss危害:
最常见的危害窃取受害者的 Cookie,通过 document.cookie 读取并发送给攻击者服务器
窃取 DOM 内容,Token、用户个人敏感信息(用户名、密码、身份证等),
劫持用户会话,通过 JavaScript 自动提交表单,发起CSRF攻击,执行任意操作,如更改密码、转账
重定向用户:将受害者浏览器重定向到钓鱼网站或恶意软件下载站点
刷流量,执行弹窗广告,传播蠕虫病毒
xss分类:
• 反射型 XSS: 恶意脚本包含在请求(通常是 URL 参数)中,服务器立即将其“反射”回响应页面。受害者需要点击攻击者精心构造的恶意链接。黑盒测试中通过修改 URL 参数、POST 数据并观察响应是否原样输出且未过滤来发现。常用于钓鱼攻击。
• 存储型 XSS: 危害最大、传播最广。恶意脚本被提交并永久存储在服务器端(如数据库、文件系统、评论内容)。每当其他用户访问显示该存储内容的页面时,脚本就会自动执行。黑盒测试中寻找所有用户可控且持久化显示的数据输入点。
• DOM 型 XSS: 恶意脚本的注入和执行完全在客户端的 JavaScript 代码(DOM 操作)中完成,不经过服务器端处理。服务器返回的可能是“干净”的 HTML/JS,但客户端 JS 代码(如 document.write, innerHTML, eval, location.hash 处理不当)将用户输入(如 URL 片段 # 后的部分)动态写入了 DOM 并导致执行。黑盒测试需分析页面 JS 逻辑或模糊测试 URL 片段、postMessage 等客户端输入源。
xss预防:
Web 应用中任何接受用户输入并将其动态输出到返回页面上的地方,都有可能是注入点。用户生成内容展示区(评论/帖子/用户名)、关键词回显(搜索框结果页)、错误参数反射(错误消息页面)、URL 参数动态渲染、甚至HTTP 头部显示(如管理后台展示 User-Agent)都有可能是XSS注入点
使用html实体编码,这种方法不会影响用户体验,但是这种编码必须严格应用在用户输入被输出到HTML文档主体或HTML普通属性值的上下文。而非事件处理器、script标签内容、CSS、URL属性)
对特殊字符进行正则转义,如< > & " ’ /;字符串转义。 过滤html标签和js函数,如script、onclick、javascript,标签黑名单,协议禁用;
内容安全策略CSP(Content Security Policy,简称CSP),它的本质是一种白名单,它通过只允许浏览器只执行或渲染来自白名单的资源(脚本、样式、图片、字体、连接、框架、对象等),用于检测和预防某些前端攻击,包括跨站脚本(XSS)和数据注入攻击。攻击者构造的js代码就没什么东西鸟他了。

在Cookie 中设置 HttpOnly 属性(依然 可以通过请求劫持获取cookie)
Waf
xss绕过:
大小写
双写
拼凑,如:
<scr<script>ipt>`反引号代替单双引号
无效字符填充代替空格,如
/,|,&内联注释:如:
/*!<script>*/特殊标签和HTML5新增标签
拆分跨站
编码和、双重编码:ASCII码、十进制、十六进制、unicode,如:javascript
嵌套编码:base64+URL
UTF-7攻击
伪协议与协议混淆(注释符截断、大小写、url编码)
DOM污染链
1
2
3// 原型链污染
Object.prototype.onload = ()=>alert(1);
document.write('<img src=x>');XSS + 请求劫持绕过httponly
XSS测试字典
1 |
本文参考: