XSS 的本质,就是攻击者往网页里注入脚本,让浏览器无条件执行。而我们赖以构建网页的 HTML、CSS、JavaScript,是 XSS 攻击可利用的 “载体”,三者环环相扣,有疏漏就会有机可乘。
先从最基础的HTML说起。HTML 是网页的骨架,负责内容的结构与呈现,它解析并渲染标签,而这正是 XSS的入口。我们在开发中,遇到需要展示用户输入内容的场景,这些用户可控的内容,如果直接拼接HTML文档,没有任何转义处理,就等于给攻击者敞开了大门。
比如用户输入的不是普通文字,而是<script>...</script>,前端直接把这段字符串原封不动渲染成 HTML,浏览器会把它当作合法脚本标签解析,HTML 本身不具备执行逻辑的能力,却给脚本提供了执行空间,未转义的用户输入直出 HTML,给xss提供空间。