我知道Codeigniter有一个非常有用的安全类,可以防止CSRF/XSRF,如果你使用表单帮助器,但由于CI url结构调用了很多函数非常直接,我怎么能防止CSRF的东西,如/action/logout
没有像SE有一个额外的确认表单?
我的想法:
- 检查页面引用
- 检查请求的MIME类型(甚至可能?)(对于图像CSRF如
<img src="http://example.com/action/logout" />
) - 使所有动作成为表单的一部分(不可取)
- 在页面URL中包含CSRF令牌(丑陋和非常糟糕,用户喜欢复制和粘贴URL而不考虑存储的会话id或其他私人信息)
我不会费心保护像/account/view/1/cyclone/
这样的东西,因为它不执行任何动作,最多只是浪费带宽。
当然,我知道有些人喜欢编写代码来自动化他们的网站使用,我尊重这一点,这就是为什么我要创建一个API来通过代码或自动执行操作。
作为一般规则,任何执行操作的表单请求都应该使用POST
。对于所有其他的GET
是允许的。使用POST肯定会有帮助。我相信您还可以将令牌作为表单中的隐藏字段,而不是URL中的丑陋字符串。至于检查请求的MIME类型,这是不可能的。做一个print_r($_SERVER),里面基本上是你从用户和服务器端得到的所有东西。