防止CSRF?

发布于 2024-12-24 19:01:32 字数 689 浏览 2 评论 0原文

我已经从这里看到了一些问题(stackoverflow)和这个< /a> 帖子,但我仍然有一些问题...

  1. 在帖子表单中使用隐藏值,并在帖子到达服务器时检查它。

    • 隐藏值可以很容易地被复制并发送,就像真实的值一样,“难以猜测”(如 md5)将无济于事。 (对吗?)
  2. 当您到达表单时设置 cookie 并将 cookie 值作为隐藏值发送。

    • 您可以轻松更改 Cookie 值,或使用相同的真实隐藏值发送与真实 Cookie 完全相同的自定义 Cookie。 (对吗?)
  3. 使用“超时”,POST 值不会达到太晚。

    • 因此,如果您的速度很慢,那么当您尝试使用隐藏值设置所有内容时就会失败。如果你动作快的话,一定会成功的。 (对吗?)

我想受到有关 CSRF 的保护...但我到底该怎么做呢?

I already seen some question from here (stackoverflow) and THIS post, but I still have some questions...

  1. Using hidden value in the post form and check it when post reach the server.

    • The hidden value can easy be copied and send exactly like the real one, "hard to guess" (like md5) will not help. (right?)
  2. Setting a cookie when you reach the form and send the cookie value as a hidden value.

    • You can easily change a cookie value or send a custom cookie exactly like the real one using the same real hidden value. (right?)
  3. Using 'timeout', the POST values cannot reach too late.

    • So, if you're slow you will fail when you try to set everything up with the hidden value. If you're fast it gonna work. (right?)

I want to be protected about CSRF...but how exactly I do it?

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

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

发布评论

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

评论(2

空城缀染半城烟沙 2024-12-31 19:01:32

我发现防止 CSRF 问题的最简单方法是:

  1. 在服务器端,分配一个 HttpOnly cookie 到带有随机(不可猜测的)令牌的客户端

  2. 放置具有该 cookie 值的表单上的隐藏字段

  3. 提交表单时,确保隐藏字段值等于 cookie 值(在服务器端) things)

The easiest way I found to prevent CSRF issues is:

  1. On the server side, assign an HttpOnly cookie to the client with a random (unguessable) token

  2. Place a hidden field on the form with that cookie value

  3. Upon form submit, ensure the hidden field value equals the cookie value (on the server side of things)

非要怀念 2024-12-31 19:01:32

如果您进行以下更改,那么我认为您是安全的,

  • 不应通过 GET(或更好的 POST)允许数据更新(因为两者都可以通过 HTML 表单使用)
  • 在您的服务器上禁用 CORS(或至少在端点上)是关键和/或对数据进行更改)
  • 允许仅 JSON API(即至少在关键端点上仅接受通过 JSON 的输入)

只是添加到上面:不要使用方法覆盖并且不支持旧浏览器。

If you make the following changes then I think you're safe

  • no data updates should be allowed through GET (or better POST as well) (since both can be used through HTML forms)
  • disable CORS on your server (or at least on endpoints that are critical and/or make changes to data)
  • allow JSON-only APIs (ie. only accept input through JSON on critical endpoints at least)

Just to add to above: Do not use method overrides and do not support old browsers.

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