在 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令牌,则表单成功提交