csrf漏洞防御方案_Web渗透测试(CSRF)

跨站请求伪造(Cross Site Request Forgery,CSRF)

Hacker ⽤户可以伪造admin ⽤户的转账请求,强制admin ⽤户,转账给任意⽤户。

157b6f0f6a36b548c9a9255e0472ac91.png

基本概念

CSRF 是⼀种攻击,它强制终端⽤户在当前对其进⾏身份验证后的Web 应⽤程序上执⾏⾮本意操作的攻击。

CSRF 攻击的重点在于更改状态的请求,⽽不是盗取数据,因为攻击者⽆法查看伪造请求的响应。

借助于社⼯的⼀些帮助,例如,通过电⼦邮件或聊天发送链接,攻击者可以诱骗⽤户执⾏攻击者选择的操作。如果受害者是普通⽤户,则成功的CSRF 攻击可以强制⽤户执⾏更改状态的请求,例如转移资⾦、修改密码等操作。如果受害者是管理账户,CSRF 攻击会危及整个Web 应⽤程序。

关键点

受害者没有退出登录。

CSRF 是⼀种欺骗受害者提交恶意请求的攻击。它继承了受害者的身份和特权,代表受害者执⾏⾮本意的、恶意的操作。

对于⼤多数站点,浏览器请求会⾃动发送与站点关联的所有凭据,例如⽤户的会话Cookie,IP 地址,Windows 域凭据等。因此,如果⽤户已对当前站点进⾏了身份验证,则该站点没有办法区分⼀个请求是受害者发送的合法请求还是攻击者伪造受害者身份发送的⾮法请求。

CSRF 的场景复现

模拟银⾏⽹站

311efa850affab1f6fb1d95234d73a04.png

chrome/firefox/360极速版,三个不同浏览器使用不同账户登录:

2f18ff47627ba69de88e15752942f928.png
admin/123456
24715a30bd33af5cea500ce4a3080e25.png
hello/123456
a347e41f4c271a2fe5cb21d692b02d7f.png
hacker/123456
a73d19dfc85672c9e0a3339137a68755.png

恶意⽹站

eb1f75f43024276ad8ecfc8c0defc3e3.png

admin点击链接后:

4a561ee1ce417f59c07df342666a84c3.png
45a9f9f7f9be7fc21354d33486f014bd.png

hello用户点击链接后:

ac89c664b8156c5612239b6b546abc88.png
85a33dbfad999152a52ecf1180dfe51a.png

构造CSRF 攻击连接

get方式:


通过 标签构造GET 请求。这个GET 请求来⾃于受害者的浏览器,是⽤户发起的转账请求。受害者访问⽹站的时候加载了 标签。浏览器会根据 标签中的 SRC 属性,请求服务器资源(GET),会⾃动带上身份认证信息(Cookie,用户被切换为hacker了)。

CSRF 场景建模

1e253631fbed8dd633b33131f4bc50b5.png

post方式:

   
宝⼑在⼿,谁与争锋

与XSS 漏洞相结合

攻击者可以利⽤XSS 触发CSRF 攻击。因为,可以利⽤JS 发送HTTP 请求。

经过研究受害⽹站的业务流程,可以构造如下代码:

d3774d8bb7e6a3348e4723723086e078.png

恶意代码触发,创建了wenxin/123456账户!

CSRF 漏洞的防御

⽆效的防御

使⽤秘密的Cookie(直接就可以使用了,无需解密)

仅接收POST 请求

多步交易

多步交易,有可能会被恶意攻击者预测。

URL 重写

⽤户的身份信息会暴露在URL 中不建议通过引⼊另外⼀个漏洞来解决当前漏洞

HTTPS

所有安全机制的前提

有效的防御

验证 Referer 字段

当前URL 的上⼀个URL是否可以伪造?

添加Token 验证

⼀串随机字符串每⼀次客户端的请求,服务器都要刷新Token服务器创建了⼀个Token 值,存储在服务器中并且下发到浏览器下次浏览器请求,需要提交该Token 值,服务器根据浏览器提交的Token 与服务器中存储的Token进⾏⽐对如果⼆者⼀致,说明请求是正常业务流程。如果⼆者不⼀致,说明请求有可能来⾃于恶意的攻击者。Token 的设计,在PHP 中通常利⽤SESSION 机制来实现。
087f1817a403265dfd49474d85809ecf.png
722dee66d3c52635657283a1e5421bb4.png

⼆次验证

在关键操作之前,再输⼊密码或者验证码。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值