【问题标题】:ColdFusion forcing CSRF to failColdFusion 强制 CSRF 失败
【发布时间】:2019-10-20 23:28:29
【问题描述】:

我有一个网站,可以在用户登录时检查 CSRF 令牌。表单看起来像

<cfoutput>
    <input type="hidden" name="token" value="#CSRFGenerateToken()#" />
</cfoutput>

稍后检查

if (framework.getCGIRequestMethod() == "post" && !CSRFverifyToken(rc.token))    {
    rc.arMessage.append("<b>Debug:</b> Fail Token");

    return;
    }

我想验证这实际上是在检查。令牌是否过期或超时?在application.cfc 中更改this.name= 似乎没有任何作用。令牌是基于域名的吗?

我需要对此进行测试。我不需要自动化测试,只需以某种方式进行测试即可。

【问题讨论】:

  • 根据文档,应该创建值并将其放入当前会话中。也许转储并验证该值是否存在?您应该能够在整个会话中使用一个,或者强制为每个表单使用一个新值(这似乎有点过分了)。 cfdocs.org/csrfgeneratetoken
  • 有趣的是,在链接的文档中,所有示例都是表单的一部分。没有一个在会话范围的变量中
  • 我认为该函数本质上是“如果此会话变量不存在,则创建它并将其定义为该值”。然后将该值作为表单字段变量提交,这使您可以根据会话变量值验证表单范围变量值。

标签: coldfusion csrf cfml coldfusion-2016 fw1


【解决方案1】:

要对此进行测试,请使用 https://www.getpostman.com/ 之类的内容。

定位表单的操作页面:

  • 创建GET请求;验证它会引发错误。
  • 创建一个不带token 字段的POST 请求;验证它会引发错误。
  • 使用token字段创建一个POST请求,其值与CSRFGenerateToken()生成的值不匹配;验证它会引发错误。
  • 使用token 和正确的值创建POST 请求;验证它是否正确处理。

【讨论】:

  • 我什至没有想到这一点。 Postman 可以只拉一个常规页面,而不仅仅是 JSON 数据。
猜你喜欢
  • 2011-12-18
  • 2014-01-09
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
  • 2016-01-23
  • 2012-12-17
  • 2013-04-06
  • 2018-03-22
相关资源
最近更新 更多