是否可以在 PHP 中使用 file_get_contents 破坏 CSRF 令牌验证

tod*_*daf 4 php security csrf file-get-contents

为每个会话在表单上使用令牌的 CSRF 预防方法是一种流行的方法。但是,如果file_get_contentsPHP 可以获取跨域文件表单的内容,我不明白这种令牌方式如何保护--> 它可以获取表单上的令牌并使用它。

那么这种令牌方式是如何工作的呢?

rin*_*eez 5

如果我很好地理解了您的问题,那么您正在想象一个可能的漏洞利用:

  1. 攻击者创建一个 PHP 页面,该页面将向目标用户展示一个虚假表单
  2. 攻击者的 PHP 脚本将执行 afile_get_contents从他试图利用的目标站点下载表单(HTML),并从下载的 HTML 中提取 CSRF 令牌,并将此 CSRF 令牌添加到呈现给用户的假表单中。

  3. 毫无戒心的用户将提交表单,并在此用户会话的上下文中在目标站点中执行意外请求。

  4. 目标站点的 CSRF 检查将通过,因为我们的请求中有一个有效的 CSRF 令牌

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

会话是这里的关键。当您执行file_get_contents从目标站点下载表单时,请求在其自己的会话上下文中执行,该file_get_contents进程是那里的客户端,并且为该请求生成的 CSRF 令牌将(必须)仅在以下上下文中有效那个特定的会议。稍后,当目标用户提交您的虚假表单时,该请求在该用户会话的上下文中执行,而该会话与file_get_contents会话不同,因此如果目标站点在一个合适的方式。

这是 OWASP 的一篇好文章,可以了解更多关于推荐的Synchronizer Token Pattern 以防止 CSRF