CSRF

1.基础知识:跨域访问控制和Same-Origin Policy(同源策略)

1.1Cookies的自动发送机制

登录Web应用后,浏览器会存储一些Cookies
当我们向该应用发送请求时,这些Cookies会自动随请求一起发送,用于验证我们的登录状态。

1.2同源策略的作用

HTML中的iframe可以嵌入其他网站,但出于安全考虑,跨iframe通信通常是被禁止的。
这是因为同源策略(Same-Origin Policy)是一种安全机制,
确保攻击者的网站不能随意向其他网站发送请求并读取跨域数据。

同源策略要求以下三点一致才能允许跨域读取数据:
相同域名
相同协议(schema)
相同端口

这不仅适用于iframe,也适用于Ajax请求。

2.跨站请求伪造(CSRF)的攻击原理

CSRF(Cross-Site Request Forgery)指的是一个域伪造请求发送到另一个域,并试图修改数据。

攻击场景
假设有一个网站vulnerable.com,点击“删除”按钮会发送一个请求到vulnerable.com/delete_my_account,从而删除用户账户。
攻击者创建了一个恶意网站catacomb.com,并诱骗用户访问。当用户访问catacomb.com时,
浏览器会自动发送一个伪造的删除请求到vulnerable.com,因为Cookies会自动附带,服务器会认为该请求是合法的,从而删除用户账户。

关键点
攻击者利用了浏览器会自动发送Cookies的机制,即使请求来自一个完全不同的域。

3.CSRF的防御方法

3.1随机Token(Anti-CSRF Token)

Web应用在后端生成一个随机Token,并将其附加到每个请求中。
在服务器端验证该Token是否有效。如果攻击者无法获取这个Token,就无法伪造请求。

3.2同源策略的限制

CSRF攻击并未违反同源策略,因为攻击者无法读取响应数据,但请求本身仍然被发送并执行。

4.高级CSRF攻击:JSON数据与Content-Type头的处理

4.1 JSON数据的伪造

HTML表单通常不能直接发送JSON数据,但通过巧妙构造表单字段,可以伪造出看似JSON格式的数据。
如果服务器不严格验证Content-Type头,就可能被利用。

4.2 绕过Content-Type头的限制

如果服务器要求Content-Type为application/json,攻击者无法通过普通表单设置此头部。
使用JavaScript的fetch或XMLHttpRequest可以设置头部,但会触发同源策略。
如果服务器启用了CORS(跨域资源共享),并明确允许特定域,则可以完成攻击。

4.3 使用Flash文件

Flash文件不受同源策略的限制,可以设置任意头部。但由于Flash已被淘汰,这种方法几乎不再适用。

4.4 307重定向

通过中间服务器进行307重定向,可以保留请求头和数据,从而实现攻击。

5.总结

总结
CSRF是一种经典的Web安全漏洞,尽管防御技术已经普及,但其危害仍然存在。为了防止CSRF,开发者应始终:
使用随机Token进行验证。
严格检查请求头和数据格式。
在敏感操作中引入用户交互(如确认对话框)。
通过这些措施,可以有效降低CSRF攻击的风险。

可利用CSRF注销他人账号、修改个人信息等
若携带token,可尝试删除,看是否能够绕过

来源链接:https://www.cnblogs.com/lx-limit/p/18649958

请登录后发表评论

    没有回复内容