我遇到了CodeIgniter / CSRF / JSON的问题 .
我使用Content-Type“application / json将HTTP POST请求发送到我的PHP后端 . 有效负载是JSON数据 . 除了数据之外,我还传递生成并存储在CSRF cookie中的CSRF令牌 . 使用标准POST FORM请求,它工作得很好,但是当作为JSON发送时它失败了 .
由于$ _POST数组由于JSON内容类型而为空,因此CodeIgniter无法验证cookie并引发错误 .
如何让CodeIgniter检查JSON有效负载并验证我的CSRF令牌?
4 回答
或者,您可以通过在351号行(基于CI 2.1.4)下的application / config / config.php上添加以下代码来跳过CSRF检查 .
要解决这个问题,我不得不更改位于“system / core /”中的“Security.php”文件的代码 .
在函数“csrf_verify”中,替换该代码:
通过该代码:
该代码首先检查$ _POST然后如果没有找到任何内容,它将检查JSON有效负载 .
执行此操作的理想方法是检查传入请求Content-Type标头值 . 但令人惊讶的是,这并不是直截了当的......
如果有人有更好的解决方案,请在此处发布 .
干杯
如果需要重写,最好扩展安全库,而不是直接编辑核心文件 .
在application / core /中创建文件My_Security.php并添加以下内容(来自上面的解决方案):
正如Brian所写,您必须将自定义类放入/ application / core / ex . My_Security.php
这是我的解决方案,为我工作,我检查application / json content_type并请求cookie .