1

我知道 Codeigniter 有一个非常有用的安全类,如果你使用表单助手,它可以防止 CSRF/XSRF,但是由于 CI url 结构几乎直接调用了很多函数,我怎样才能在/action/logout没有额外的情况下防止 CSRF像SE这样的确认表?

我有过的想法:

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

我不会费心保护诸如此类的东西,/account/view/1/cyclone/因为它不会执行任何操作,最多只会浪费带宽。

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

4

1 回答 1

1

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

于 2011-08-08T18:20:00.630 回答