【问题标题】:Phalcon csrf fail on serverPhalcon csrf 在服务器上失败
【发布时间】:2016-02-14 14:43:51
【问题描述】:

我正在使用 phalcon 2.0.9。

我有一个登录表单,带有 csrf 保护。

这是表单中的代码:

<input type='hidden' id='token' name='{{ security.getTokenKey() }}' value='{{ security.getToken() }}' />

这是控制器中的验证:

if(!$this->security->checkToken()) {
    // error code here
}

它在本地主机上完美运行,但是当我将它上传到服务器时,它总是失败。我在登录时使用ajax。 post请求后,session中的csrf token与post中的token不同。

这是什么原因造成的?

【问题讨论】:

  • 控制台有错误吗?
  • “...它总是失败”。它以什么方式失败?您收到任何错误消息吗?例如在服务器日志中?
  • $this->security->checkToken() 返回 false,即使我在页面加载后尝试登录。似乎在生成登录页面后,csrf 发生了变化,但我不知道在哪里或为什么。
  • 我不会关闭这个问题,因为在这种情况下很难更详细地解释确切的错误。 $this-&gt;security-&gt;checkToken() 在不应该的时候返回 false。 OP应该在问题中提到这一点,但他们在上面的评论中提到了。保持这个开放,伙计们。
  • 您的crypt 服务是用alphanumeric token 初始化的吗?

标签: php phalcon csrf-protection


【解决方案1】:

信用:丹尼尔@ https://forum.phalconphp.com/discussion/922/csrf-protection-not-working

确保您也在服务器上使用最新的 Phalcon 版本
并且要么使用论坛上用户提供的服务器配置,要么将您的 notfound(404) 操作移动到不包含 CSRF TokenKey 和密钥生成的控制器。

如果在服务器上找不到项目 favion/robot.txt/img 等,则会触发 404 操作,您最终会重新生成 CSRF 令牌。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2011-09-17
    • 1970-01-01
    • 2015-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    相关资源
    最近更新 更多