是否可以使用PHP中的file_get_contents来中断CSRF令牌验证

在每个会话的表单上使用令牌的CSRF预防方法是一种流行的方式.但是,如果PHP的file_get_contents可以获取跨域文件格式的内容,我不知道这种令牌方式如何保护 – >它可以在表单上获取令牌并使用它.

那么这种令牌方式如何运作?

最佳答案
如果我理解你的问题,你就会想象一个可能的漏洞:

> Attacker创建一个PHP页面,向目标用户显示虚假表单
>攻击者的PHP脚本将执行file_get_contents从他试图利用的目标站点下载表单(HTML),并从下载的HTML中删除CSRF令牌,并在呈现给用户的假表单中添加此CSRF令牌.
> Unsuspecting用户将提交表单,并且将在此用户会话的上下文中在目标站点中执行非预期的请求.
>目标站点中的CSRF检查将通过,因为我们的请求中有一个有效的CSRF令牌

但是等等..我们有一个有效的令牌吗?我们真的!
如果目标站点以正确的方式执行CSRF,则不会.

会议是关键.当您执行file_get_contents以从目标站点下载表单时,请求在其自己的会话的上下文中执行,file_get_contents进程是那里的客户端,并且为该请求生成的CSRF令牌将(必须)仅在该特定会议的背景.
稍后,当目标用户提交请求该请求在该用户会话的上下文中执行的伪表单时,该表单与file_get_contents会话不同,因此如果CSRF检查由目标站点实现,则CSRK令牌将被拒绝.一个正确的方法.

这是来自OWASP的一篇很好的文章,可以更多地了解推荐的Synchronizer Token Pattern for prevention of CSRF

转载注明原文:是否可以使用PHP中的file_get_contents来中断CSRF令牌验证 - 代码日志