使用 Django 和 websockets 的跨站请求伪造保护
Cross Site Request Forgery protection with Django and websockets
我已经使用 Django 通道(2.1.5 版)在我的 Django(2.0 版)驱动的网站上成功创建了一个 websocket。
一切都很好,但我想知道 CSRF 令牌如何。在 websockets 的情况下是否需要它? Documentation 说使用 OriginValidator
来阻止这样的线程就足够了,但我想确保这一点。我的意思是,CSRF 令牌发生了什么?我是否只是在没有它的情况下通过安全通道发送数据并且后端会自动检查所有内容?如果是这样,那为什么呢?为什么简单的视图不能做到这一点?
我知道这是一个非常开放的问题,但我找不到任何具体的解释,如果有人有解释,我将不胜感激。
干杯!
使用 websocket 连接时不需要 CSRF 令牌。
当您访问恶意网站时,它可能会通过 javascript 向您当前登录的另一个网站发送 post-request。您的浏览器也会向您发送 session-cookie这个其他网站,所以网络服务器认为你确实愿意发送这个 post-request 并且会执行请求。 CSRF-cookie 可以防止这种情况。 Thins 恶意站点无法读取 CSRF-cookie 的值,无法将值添加到 post-request.
恶意网站也有可能打开到其他站点的 websocket 连接。这就是为什么您必须使用 OriginValidator 的原因。如果您使用它,则服务器仅接受来自您的站点的 websocket 连接。
当恶意站点试图打开与您的服务器的连接时,它会立即被拒绝。
所以 post-request 和 websocket-connections 之间的区别是,浏览器在 websocket 连接上发送源 header 但并不总是在 post 请求上。
似乎现代浏览器总是发送来源header:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin
所以也许您根本不必使用 CSRF-cookie。另见:CSRF protection with CORS Origin header vs. CSRF token
我已经使用 Django 通道(2.1.5 版)在我的 Django(2.0 版)驱动的网站上成功创建了一个 websocket。
一切都很好,但我想知道 CSRF 令牌如何。在 websockets 的情况下是否需要它? Documentation 说使用 OriginValidator
来阻止这样的线程就足够了,但我想确保这一点。我的意思是,CSRF 令牌发生了什么?我是否只是在没有它的情况下通过安全通道发送数据并且后端会自动检查所有内容?如果是这样,那为什么呢?为什么简单的视图不能做到这一点?
我知道这是一个非常开放的问题,但我找不到任何具体的解释,如果有人有解释,我将不胜感激。
干杯!
使用 websocket 连接时不需要 CSRF 令牌。
当您访问恶意网站时,它可能会通过 javascript 向您当前登录的另一个网站发送 post-request。您的浏览器也会向您发送 session-cookie这个其他网站,所以网络服务器认为你确实愿意发送这个 post-request 并且会执行请求。 CSRF-cookie 可以防止这种情况。 Thins 恶意站点无法读取 CSRF-cookie 的值,无法将值添加到 post-request.
恶意网站也有可能打开到其他站点的 websocket 连接。这就是为什么您必须使用 OriginValidator 的原因。如果您使用它,则服务器仅接受来自您的站点的 websocket 连接。
当恶意站点试图打开与您的服务器的连接时,它会立即被拒绝。
所以 post-request 和 websocket-connections 之间的区别是,浏览器在 websocket 连接上发送源 header 但并不总是在 post 请求上。
似乎现代浏览器总是发送来源header:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Origin
所以也许您根本不必使用 CSRF-cookie。另见:CSRF protection with CORS Origin header vs. CSRF token