在每个会话的表单上使用令牌的 CSRF 预防方法是一种流行的方法。但是,我不明白这种令牌方式如何保护file_get_contents
PHP 可以获取跨域文件表单的内容 --> 它可以获取表单上的令牌并使用它。
那么这种token方式是如何运作的呢?
如果我很好地理解你的问题,你正在想象一个可能的漏洞,如下所示:
- 攻击者创建一个 PHP 页面,该页面将向目标用户呈现虚假表单
攻击者的 PHP 脚本将执行以下操作file_get_contents
从他试图利用的目标站点下载表单(HTML),并从下载的 HTML 中删除 CSRF 令牌,并将此 CSRF 令牌添加到呈现给用户的虚假表单中。
毫无戒心的用户将提交表单,并且在此上下文中的目标站点中将执行意外的请求用户会话.
目标站点中的 CSRF 检查将通过,因为我们的请求中有有效的 CSRF 令牌
但是等等..我们有有效的令牌吗?我们真的吗!
如果目标站点以正确的方式实施 CSRF 检查,则不会。
会话是这里的关键。当你执行file_get_contents
要从目标站点下载表单,该请求在其自己的会话上下文中执行,file_get_contents
process 是那里的客户端,并且为该请求生成的 CSRF 令牌仅在该特定会话的上下文中(必须)有效。
稍后,当目标用户提交您的虚假表单时,该请求将在该用户会话的上下文中执行,该会话不同于file_get_contents
会话,因此如果目标站点以正确的方式执行 CSRF 检查,CSRK 令牌将被拒绝。
这是 OWASP 的一篇好文章,可以了解更多关于推荐的内容用于预防 CSRF 的同步器令牌模式 https://www.owasp.org/index.php/Cross-Site_Request_Forgery_%28CSRF%29_Prevention_Cheat_Sheet#General_Recommendation:_Synchronizer_Token_Pattern
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)