CakePHP 3 Post方法'403 Forbidden'

时间:2016-04-19 22:57:39

标签: mysql cakephp-3.0 http-status-code-403

我今天遇到了一个非常奇怪的问题,找不到任何解决方案。我正在使用CakePHP 3以及MySQL和Apache。一切都很完美,直到今天,但当我试图编辑其中一个论坛帖子时,它没有保存,我得到了403 Forbidden回复。以下是我得到的回复:

Request URL:https://www.example.com/users/edit/2
Request Method: POST
Status Code:403 Forbidden

奇怪的是,当我在加载编辑页面时尝试创建新论坛帖子以及GET请求时,它工作正常。但是当我修改字段并尝试保存时,我会遇到403 Forbidden

我在过去的6个小时内尝试了所有方法,但找不到任何解决方案。我检查了数据库用户的编辑权限,试图完全删除.htaccess文件,清除浏览器缓存和cookie,但没有任何帮助。托管帐户中的其他网站工作正常,没有问题。

我今天唯一值得注意的事情是我在git上初始化了GIT存储库并上传了项目文件。我非常感谢你帮助解决这个问题。不能修改任何东西真的是一个令人头痛的问题。

2 个答案:

答案 0 :(得分:1)

仅供将来参考,我通过在POST函数中明确定义$this->Form->create的请求类型来解决此问题。

这是我在使用CakePHP 3时遇到的最奇怪的错误之一!不确定为什么默认的PUT方法不起作用。它正在转换为GET

答案 1 :(得分:0)

嗯,终于我自己找到了罪魁祸首。.这就是我得到的解释,在这里,您去:

如果您在cakephp中使用csrf来确保安全性,则可能会发现cakephp过滤掉ajax或表单中所有该死的POST,GET,PUT,如果未找到auth,cakephp将以403 HTTP状态进行响应。.

这意味着您必须在每个请求上放置一些csrf令牌,如无记名令牌,以便cakephp识别该请求。看看,如果您使用的是AJAX调用,那么必须手动将csrf令牌放在此处进行解释:https://book.cakephp.org/3.0/en/controllers/components/csrf.html

如果您手动创建了表单,则必须将令牌放入表单本身,如果您使用cakephp helper创建表单,您将看到cakephp生成了一些像这样的隐藏参数

<form enctype="multipart/form-data" method="post" accept-charset="utf-8" action="/SFW/CMS/event/comment">
  <div style="display:none;">
    <input type="hidden" name="_method" value="POST">
    <input type="hidden" name="_csrfToken" autocomplete="off" value="2a39630d2a1c20d43xxxx">
  </div>
......     

因此,该选项仅将那些隐藏的字段放在您手动生成的表单上。

祝你好运