在 CodeIgniter 中启用 CSRF 为 TRUE [关闭]

Posted

技术标签:

【中文标题】在 CodeIgniter 中启用 CSRF 为 TRUE [关闭]【英文标题】:Enabling CSRF to TRUE in CodeIgniter [closed] 【发布时间】:2012-09-27 12:34:27 【问题描述】:

刚刚读到 CodeIgniter 2.x 具有内置的 CSRF 保护。现在阅读文档后,我没有找到任何与 CSRF 相关的内容,只是在config.php 文件中将其设置为TRUE 的选项就可以了。但是,在我的系统中,我没有使用自动结合 CodeIgniter 的 CSRF 保护的 form_helper,而是使用 html 的原生 <form>

我担心的是我需要做些什么来实现 CodeIgniter 的 CSRF,还是只需将选项设置为 TRUE 就足够了?

【问题讨论】:

有什么想法或文章可以分享给这位朋友吗? Codeigniter 自带源码。您只需要阅读它,它已经在您的磁盘上。 当然,我可以阅读源代码。但是,我并没有那么早理解为什么 CodeIgniter 的 CSRF 会被破坏。我有兴趣了解更多。或许可以得到指导。 我的错,我可能把它和 XSS 混在一起了。但是,查看 CSRF 的源代码将 a) 告诉您它是如何工作的 b) 显示您可能需要为您的 <form> 方法使用什么函数。不要害怕成为最好的,阅读会有所帮助。阅读源代码并不复杂。他们甚至离开了 cmets ;) 【参考方案1】:

要在 Codeigniter 中启用 CRSF,您只需:

    在配置文件中将选项设置为“TRUE”

    所有表单必须使用form_open() helper function。这将自动生成并在您的表单中包含一个“隐藏的”CSRF 令牌。作为安全功能的一部分,Codeigniter 将在每次提交表单时自动检查此令牌。如果检测到 CSRF 错误,会自动抛出 401 错误。

你不需要做任何其他事情。

编辑:我刚刚重新读到您不使用 form_open()。可以自己手动将 CSRF 令牌插入到表单中——但这会比所需的工作量更多。只需将所有表单转换为使用 form_open - 它就可以无缝运行。

(是的 - 这是 CI 中为数不多的文档记录不佳的功能之一 - 所以我理解你为什么找不到答案 - 我也花了一段时间)

【讨论】:

谢谢你,如果它确实返回 401,我该如何处理?会显示 401 页面吗?

以上是关于在 CodeIgniter 中启用 CSRF 为 TRUE [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter:Paypal IPN 和 csrf_protection

Codeigniter CSRF - 它是如何工作的

如果我从CodeIgniter表单复制csrf令牌,则表单成功提交

Codeigniter CSRF - 它是如何工作的

在没有表格的情况下获取 Codeigniter CSRF 令牌?

codeigniter CSRF 错误:“不允许您请求的操作。”