热点

xss测试代码

时间:2010-12-5 17:23:32  作者:百科   来源:知识  查看:  评论:0
内容摘要:XSS测试代码 把 <script>alert(1)</script> 敲进搜索框,回车。页面弹出一个白框,里面就一个数字 1。这说明后端没过滤,前端也没转义,脚本原样进了 D

XSS测试代码

把 <script>alert(1)</script> 敲进搜索框,试代回车。试代页面弹出一个白框,试代里面就一个数字 1。试代这说明后端没过滤,试代前端也没转义,试代脚本原样进了 DOM。试代就这么简单,试代一个最基础的试代反射型 XSS 就成立了。

很多人第一次接触 XSS 就是试代从这个 alert(1) 开始的。它像一把钥匙,试代但只负责告诉你门没锁,试代不负责开门之后能拿走什么。试代真正做测试的试代时候,alert 只是试代确认漏洞存在,后面才是干活的部分。

三种类型,入口不一样

反射型最常见,也最容易被安全扫描器逮到。payload 藏在 URL 参数里,服务端把它拼进 HTML 返回。你发一条链接给别人,对方点了才会触发。存储型更麻烦——payload 进了数据库,每个访问页面的人都中招。留言板、用户名、订单备注,凡是能存文本又能展示的地方都值得试。DOM 型则完全不经过服务端,靠前端 JS 从 location.hash 或 document.referrer 里取值再写进页面,服务端日志里干干净净。

我见过一个后台系统,搜索框做了长度限制,200 个字符封顶。直接塞完整 payload 会被截断。<script> 标签根本写不进去。但测试的时候发现它把关键词回显在 <input value="..."> 的属性里。这就好办了,不需要闭合标签,直接闭合属性:" onmouseover="alert(1)。鼠标划过输入框就弹。长度也够。这种场景下,测试思路得跟着输出点走,不是背 payload 就完事。

绕过过滤是常态

现在的 WAF 和框架多少都会拦一点。<script> 被过滤了?试试 <img src=x onerror=alert(1)>。onerror 被拦?换 <svg onload=alert(1)>。大小写混写、HTML 实体编码、JavaScript 里用 String.fromCharCode 拼接,手段多得是。有一次遇到一个站,尖括号和引号全被转义,但反引号没处理。最后用 <img src=x onerror=alert`1`> 绕过去了。测试这件事,拼的就是对细节的耐心。

不过得说清楚,这些代码只能在自己的靶场或者有书面授权的目标上跑。没授权就往别人站上打 payload,那不叫测试,叫入侵。法律风险是实打实的,别拿这个开玩笑。

防御端怎么看

输出编码是底线。HTML 上下文用 HTML 实体编码,JS 上下文用 JS 编码,URL 上下文用 URL 编码,别搞混。CSP 能兜底,但配不好也白搭,unsafe-inline 一开等于没开。Cookie 加 HttpOnly 能防住窃取会话,但防不住页面被篡改。没有哪一层是万能的,得叠着用。

说到底,XSS 测试代码本身没什么神秘的。核心就一句话:想办法让浏览器把你的输入当成代码执行,而不是当成文本显示。理解输出点的上下文,比背一百条 payload 都有用。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap