Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Don';我不明白Django';s CSRF保护工程_Javascript_Django_Csrf_Django Csrf - Fatal编程技术网

Javascript Don';我不明白Django';s CSRF保护工程

Javascript Don';我不明白Django';s CSRF保护工程,javascript,django,csrf,django-csrf,Javascript,Django,Csrf,Django Csrf,阅读本文,他们建议在cookie中设置一个csrftoken,然后让客户端框架将其放在一个标头中,该标头将在服务器端请求上进行验证。但是,在cookie中包含令牌是否会因为cookie是根据每个用户的请求发送的而违背目的 或者这里的“安全性”是Django在头中检查该值,而不是检查cookie值本身 我确实理解为什么这适用于同步提交,但在这种情况下,csrftoken直接写入页面,而不是存储在cookie中,这似乎更安全 从: 检查请求是否具有有效的会话cookie是不够的,我们需要 需要检查发

阅读本文,他们建议在cookie中设置一个csrftoken,然后让客户端框架将其放在一个标头中,该标头将在服务器端请求上进行验证。但是,在cookie中包含令牌是否会因为cookie是根据每个用户的请求发送的而违背目的

或者这里的“安全性”是Django在头中检查该值,而不是检查cookie值本身

我确实理解为什么这适用于同步提交,但在这种情况下,csrftoken直接写入页面,而不是存储在cookie中,这似乎更安全

从:

检查请求是否具有有效的会话cookie是不够的,我们需要 需要检查发送的每个HTTP请求是否都发送了唯一标识符 对应用程序进行修改。CSRF请求将没有此有效的唯一 标识符。CSRF请求没有此唯一请求的原因 标识符是页面上呈现为隐藏字段的唯一ID 并在按下链接/按钮后附加到HTTP请求 挑选出来的。攻击者将不知道此唯一ID,因为它 是随机的,每个链接、每页动态呈现


你误解了一些事情


令牌总是在cookie中;您链接到的代码用于将其从JS中的cookie中取出,以便您可以将其发送回


关键是,正如您的引文所示,试图从不在站点上的页面发布内容的攻击者不会拥有该cookie,因此无法将正确的值注入表单或标题。

您误解了几点


令牌总是在cookie中;您链接到的代码用于将其从JS中的cookie中取出,以便您可以将其发送回


关键是,正如您的引文所示,试图从不在站点上的页面发布的攻击者不会拥有该cookie,因此无法将正确的值注入表单或标题。

我不熟悉django csrf保护,但我认为它的工作原理与其他框架中的其他csrf保护类似

诀窍是,通过cookie向客户端发送csrf令牌,客户端使用头将其发送回服务器。服务器忽略cookie,但不忽略标头。如何防止csrf攻击?例如,攻击者可以绑定
(或通过javascript发送post请求)。您的浏览器将发送csrf cookie(以及会话cookie)。由于标头丢失-攻击被阻止

表格也一样。我认为头和表单都是同等安全的

但在这两种情况下,如果您有xss漏洞,您都会丢失


编辑:正如Daniel指出的,删除csrf cookie是有意义的。但这不是出于安全原因。

我不熟悉django csrf保护,但我认为它的工作原理与其他框架中的其他csrf保护类似

诀窍是,通过cookie向客户端发送csrf令牌,客户端使用头将其发送回服务器。服务器忽略cookie,但不忽略标头。如何防止csrf攻击?例如,攻击者可以绑定
(或通过javascript发送post请求)。您的浏览器将发送csrf cookie(以及会话cookie)。由于标头丢失-攻击被阻止

表格也一样。我认为头和表单都是同等安全的

但在这两种情况下,如果您有xss漏洞,您都会丢失


编辑:正如Daniel指出的,删除csrf cookie是有意义的。但这不是出于安全原因。

“令牌始终在cookie中”不正确。另外,不通过ajax发送的普通表单必须在隐藏的输入字段中包含csrf令牌。我从OWASP页面了解到,cookie不是处理此问题的好方法,因为它们将自动为域设置。因此,如果我让你点击www.socialnetwork.com/myAccount/delete,你的cookie将被发送,就像它们被发送给每个www.socialnetwork.com请求一样。你是说检查标头中的csrftoken而不是cookie,这是一种可行的方法吗?@AntonBessonov CSRF保护通过将cookie与标头/隐藏输入进行比较来实现。如果不利用其他漏洞(如XSS),潜在攻击者无法从cookie中获得正确的值,因此在发生攻击时,标头/隐藏输入中的CSRF令牌将不会与cookie具有相同的值。当这些值不匹配时,请求将被拒绝。但是,要使其工作,必须始终在cookie中设置令牌。“令牌始终在cookie中”是不正确的。另外,不通过ajax发送的普通表单必须在隐藏的输入字段中包含csrf令牌。我从OWASP页面了解到,cookie不是处理此问题的好方法,因为它们将自动为域设置。因此,如果我让你点击www.socialnetwork.com/myAccount/delete,你的cookie将被发送,就像它们被发送给每个www.socialnetwork.com请求一样。你是说检查标头中的csrftoken而不是cookie,这是一种可行的方法吗?@AntonBessonov CSRF保护通过将cookie与标头/隐藏输入进行比较来实现。如果不利用其他漏洞(如XSS),潜在攻击者无法从cookie中获得正确的值,因此在发生攻击时,标头/隐藏输入中的CSRF令牌将不会与cookie具有相同的值。当这些值不匹配时,请求将被拒绝。但是,要使其工作,必须始终在cookie中设置令牌。cookie不能被忽略,它在Django的CSRF保护中是必不可少的。丹尼尔指出,阅读cookie是有意义的,而不是移除cookie。攻击者可以简单地添加带有随机CSRF令牌的标题或隐藏输入字段,因此仅检查这些内容是不够的。为确保保护,标头/隐藏输入值必须与cookie的值相同。一