在codeigniter中防止不属于表单的东西的CSRF

时间:2011-08-08 18:11:25

标签: php codeigniter csrf csrf-protection

我知道Codeigniter有一个非常有用的安全类,如果你使用表单助手,它可以阻止CSRF / XSRF,但由于CI url结构几乎直接调用很多函数,我怎么能防止像{{{{{{ {1}}没有像SE那样的额外确认表格?

我的想法:

  • 检查页面引荐
  • 检查请求的MIME类型(甚至可能?)(对于图像CSRF,例如/action/logout
  • 使所有操作成为表单的一部分(不可取)
  • 在页面网址中包含CSRF令牌(丑陋且非常糟糕,用户喜欢复制和粘贴网址,而不考虑存储的会话ID或其他隐私信息)

我不会费心去保护像<img src="http://example.com/action/logout" />这样的东西,因为它不会执行任何操作,最多会浪费带宽。

当然,我知道有些人喜欢编写代码来自动化他们的网站使用情况,我尊重这一点,这就是为什么我要创建一个API来通过代码或自动执行操作。

1 个答案:

答案 0 :(得分:1)

作为一般规则,执行操作的任何表单请求都应使用POST。对于所有其他GET是允许的。使用POST肯定会有所帮助。我相信你也可以将令牌作为隐藏字段包含在表单中,而不是URL中的丑陋字符串。至于检查请求的MIME类型,这是不可能的。做一个print_r($ _ SERVER),基本上你从用户那里得到的东西以及服务器端的东西。