我在一些 MVC 应用程序中看到使用 Token 密钥来防止 CSRF。可以使用它的典型示例是帖子的删除方法。
而且我已经看到了使用 GET 和 POST 方法的实现。
带有令牌的示例 GET 请求链接:
https://domain.com/posts/G7j/delete/EOwFwC4TIIydMVUHMXZZdkbUR0cluRSkFzecQy3m5pMTYVXRkcFIBWUZYLNUNSNgQKdnpTWu
还有一个带有令牌的 POST 请求示例:
<form action="/posts/G7j/delete" method="post">
<input type="hidden" name="token" value="EOwFwC4TIIydMVUHMXZZdkbUR0cluRSkFzecQy3m5pMTYVXRkcFIBWUZYLNUNSNgQKdnpTWu" />
<button type="submit">Delete</button>
</form>
我一直在考虑根据文档将其实现到我的 CakePHP 应用程序中:http: //book.cakephp.org/2.0/en/core-libraries/components/security-component.html
并且根据文档,添加安全组件会自动将表单密钥添加到使用表单助手的所有表单中。
例如
public $components = array(
'Security' => array(
'csrfExpires' => '+1 hour'
)
);
但是我有一些问题:
1.) 为什么要使用 POST 而不是 GET 来执行某些操作,例如删除?由于控制器中的请求将检查用户是否已通过身份验证、是否具有权限以及是否具有正确的表单密钥。
2.) 如何在 CakePHP 中使用带有 GET 请求的安全组件?假设我还需要处理路由。