是否可以使用 PHP 中的 file_get_contents 破坏 CSRF 令牌验证
Is it possible to break CSRF token validation using file_get_contents in PHP
在每个会话的表单上使用令牌的 CSRF 预防方法是一种流行的方法。但是,如果 PHP 的 file_get_contents
可以获取跨域文件表单的内容,我不明白这种令牌方式如何保护 --> 它可以获取表单上的令牌并使用它。
那么这种令牌方式是如何工作的呢?
如果我很好地理解你的问题,你正在想象这样一个可能的漏洞利用:
- 攻击者创建一个 PHP 页面,该页面将向目标用户呈现虚假表单
攻击者的 PHP 脚本将执行 file_get_contents
从他试图利用的目标站点下载表单 (HTML),并删除 CSRF从下载的 HTML 获取令牌,并将此 CSRF 令牌添加到呈现给用户的虚假表单中。
毫无戒心的用户将提交表单,并且将在此用户会话.
的上下文中在目标站点中执行意外请求
目标站点的 CSRF 检查将通过 OK,因为我们的请求中有一个有效的 CSRF 令牌
但是等等..我们有有效的令牌吗?我们真的吗!
如果目标站点以正确的方式实施 CSRF,则不会。
会话是这里的关键。当您执行 file_get_contents
从目标站点下载表单时,请求在其自己的会话上下文中执行, file_get_contents
进程是那里的客户端,并且为该请求生成的 CSRF 令牌将是(必须)仅在该特定会话的上下文中有效。
稍后,当目标用户提交您的伪造表单时,该请求在该用户会话的上下文中执行,该会话与 file_get_contents
会话不同,因此如果 CSRF 检查由以适当的方式访问目标站点。
这里有一篇来自 OWASP 的好文章,可以进一步了解推荐的 Synchronizer Token Pattern for prevention of CSRF
在每个会话的表单上使用令牌的 CSRF 预防方法是一种流行的方法。但是,如果 PHP 的 file_get_contents
可以获取跨域文件表单的内容,我不明白这种令牌方式如何保护 --> 它可以获取表单上的令牌并使用它。
那么这种令牌方式是如何工作的呢?
如果我很好地理解你的问题,你正在想象这样一个可能的漏洞利用:
- 攻击者创建一个 PHP 页面,该页面将向目标用户呈现虚假表单
攻击者的 PHP 脚本将执行
file_get_contents
从他试图利用的目标站点下载表单 (HTML),并删除 CSRF从下载的 HTML 获取令牌,并将此 CSRF 令牌添加到呈现给用户的虚假表单中。毫无戒心的用户将提交表单,并且将在此用户会话.
的上下文中在目标站点中执行意外请求目标站点的 CSRF 检查将通过 OK,因为我们的请求中有一个有效的 CSRF 令牌
但是等等..我们有有效的令牌吗?我们真的吗! 如果目标站点以正确的方式实施 CSRF,则不会。
会话是这里的关键。当您执行 file_get_contents
从目标站点下载表单时,请求在其自己的会话上下文中执行, file_get_contents
进程是那里的客户端,并且为该请求生成的 CSRF 令牌将是(必须)仅在该特定会话的上下文中有效。
稍后,当目标用户提交您的伪造表单时,该请求在该用户会话的上下文中执行,该会话与 file_get_contents
会话不同,因此如果 CSRF 检查由以适当的方式访问目标站点。
这里有一篇来自 OWASP 的好文章,可以进一步了解推荐的 Synchronizer Token Pattern for prevention of CSRF