Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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
针对移动应用程序和chrome扩展的Django CSRF保护_Django_Csrf_Django Csrf - Fatal编程技术网

针对移动应用程序和chrome扩展的Django CSRF保护

针对移动应用程序和chrome扩展的Django CSRF保护,django,csrf,django-csrf,Django,Csrf,Django Csrf,我已经用django做了一些移动应用程序作为后端,现在我正在开发一个chrome扩展。我希望我的用户能够使用应用程序/扩展向服务器发送POST请求,但是有没有一种方法可以在不首先向服务器请求CSRF令牌的情况下实现这一点?它只会使应用程序在每次提交数据时不会发出两个请求。例如,我想在我的社交媒体应用程序上更新我的个人资料,或者从chrome扩展更新钱包。最好打开纵断面图,输入数据并将其推送到服务器。如果我必须打开配置文件,然后等待它从服务器抓取令牌,然后我可以提交数据,这就不那么圆滑了。还有别的

我已经用django做了一些移动应用程序作为后端,现在我正在开发一个chrome扩展。我希望我的用户能够使用应用程序/扩展向服务器发送POST请求,但是有没有一种方法可以在不首先向服务器请求CSRF令牌的情况下实现这一点?它只会使应用程序在每次提交数据时不会发出两个请求。例如,我想在我的社交媒体应用程序上更新我的个人资料,或者从chrome扩展更新钱包。最好打开纵断面图,输入数据并将其推送到服务器。如果我必须打开配置文件,然后等待它从服务器抓取令牌,然后我可以提交数据,这就不那么圆滑了。还有别的办法吗?还是每次我想提交数据时都要提出多个请求


还有一点需要澄清的是,CSRF阻止网站提交包含用户数据的表单。但是,怎样才能阻止我创建一个使用ajax或其他东西来获取真实站点并窃取CSRF令牌然后将其粘贴到跨站点请求表单中的站点呢?我觉得这里有个漏洞。我知道我一路上都不太理解这一点。

您可以而且应该使任何API端点CSRF豁免

Django提供了
csrf\u豁免
decorator来实现这一点,请参阅

此外,CSRF旨在防止通过GET请求伪造执行意外操作。这并不是为了让自动化系统无法提交表单,而是有验证码


至于阻止您使用AJAX获取整个站点并提取令牌的原因,我们称之为。这是由浏览器实现的,当AJAX调用的目标是不同的域而没有设置正确的头时,可以防止任何AJAX调用返回数据。(关于这一点,我不完全确定在chrome扩展中应用了什么沙箱)。因此,对于普通网站(如个人资料页面),它将(或至少应该)无法通过AJAX获取数据。如果你想与第三方网站互动,你应该调查他们是否提供API。

那么,将其设为csrf_豁免只是为了不需要csrf令牌?如果我将其用于应用程序的后端,而不提供实际页面,那么我最好禁用中间件,对吗?今天我读了很多关于csrf的书(我想我以前理解过,但显然不理解)。说CSRF是为了防止人们制作一个假网站,试图获得你的用户会话,这公平吗?CSRF可能被用于会话固定攻击。但它也允许其他攻击。如果您只创建和使用API,那么确实可以删除CSRF中间件。相反,所有请求都应该通过某种方式进行身份验证。例如,令牌或凭证。