防止 Codeigniter 中不属于表单一部分的内容发生 CSRF

发布于 2024-11-28 15:44:36 字数 553 浏览 4 评论 0原文

我知道 Codeigniter 有一个非常有用的安全类,如果您使用表单助手,它可以防止 CSRF/XSRF,但由于 CI url 结构几乎直接调用很多函数,我如何防止诸如 / 之类的 CSRF操作/注销 没有像 SE 那样的额外确认表单?

我的想法:

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

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

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

I know that Codeigniter has a very useful security class which can prevent CSRF/XSRF if you use the form helpers, but since the CI url structure calls a lot of functions pretty much directly, how can I prevent CSRF for things like /action/logout without having an additional confirmation form like SE has?

Ideas I've had:

  • Check page referrer
  • Check requested MIME type (even possible?) (for image CSRF such as <img src="http://example.com/action/logout" />)
  • Make all actions part of a form (not preferable)
  • Include the CSRF token in the page URL (ugly and very bad, users like to copy and paste urls without regard for session IDs stored or other private information)

I won't bother protecting things like /account/view/1/cyclone/ since it doesn't perform an action and would at most be a waste of bandwidth.

Granted, I do know that some people like to code things to automate their website usage and I respect that, which is why I'll be creating an API for performing actions via code or automatically.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

海夕 2024-12-05 15:44:36

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

As a general rule, any form request that performs an action should use POST. For all else GET is permitted. Using POST will definitely help. I believe you can also include the token as a hidden field in the form instead of an ugly string in the URL. As for checking the requested MIME type, this is not possible. Do a print_r($_SERVER) and in there is basically everything you get from the user as well as server side stuff.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文