当前位置: 首页 > 网络应用技术

如何防止Django中的CSRF

时间:2023-03-08 23:31:24 网络应用技术

  简介:本文的首席执行官注释将向您介绍如何防止CSRF中的Django中的CSRF。我希望这对每个人都会有所帮助。让我们来看看。

  本文目录清单:

  1. CSRF_Token理解2.哪些方法可以有效防止CSRF攻击3.当我与Django的超级用户登录时,CSRF错误发生,如图所示,如何解决它?交叉点4。什么是CSRF攻击以及如何预防5.如何预防CSRF注射攻击6.如何解决Django的抗-CSRF?在Django中编写表单时CSRF_Token的作用:

  Django下的CSRF预防机制

  CSRF预防机制

  CSRF的防御可以从服务器和客户端启动。从服务到服务,防御效果更好。现在,一般的CSRF防御也可以在服务器上执行。

  令牌防御的总体想法是:

  步骤1:后端随机生成一个令牌,并将此令牌保存在会话状态。同时,后端将把这个令牌放在首页上。

  步骤2:当前端需要启动请求(例如发布)时,将此令牌添加到请求数据或头部信息中,然后将其传递到后端;

  步骤3:后端验证前端请求是否一致的令牌和会话是一致的;

  1. Django下的CSRF预防机制

  当Django首次响应客户端的请求时,将在服务器端随机生成一个令牌,并将其放置在cookie中。

  这可以避免受到CSRF的攻击。

  在Templete中,将{%CSRF_Token%}标记添加到每个帖子表单中。

  在HTTP响应的曲奇中,Django将为您添加一个CSRFTKOKN字段,该值是自动令牌令牌

  在所有帖子模板中,添加一个{%csrf_token%}标签,其功能是添加隐藏的输入标签以形式,如下所示

  而且此csrf_token = cookie.csrftoken,有上下文['csrf_token'] = request.cookies ['csrtoken']当呈现模板['csrtoken']时

  通过表单将帖子发送到服务器时,该表单包含隐藏在其上隐藏的输入项上的输入项。服务器收到它后,Django将在此请求中验证cookie中csrftkoken字段的值以及表单中的csrfmiddletken字段的值。如果是相同的,则表示这是法律请求,否则,此请求可能来自其他人的CSRF攻击,并退回403禁止。

  当通过AJAX向服务器发送帖子请求时,需要添加X-CSRFTOKEN标头。值是cookie中csrftoken的值。收到服务湍流后,Django将验证该请求中的CSRFTOKEN字段,并且AJAX邮政消息标题X-CSRFTKEN标头是相同的。如果相同,则表明这是法律请求

  具体实施方法

  Django已完成供用户完成伪造的交叉点请求,并通过django.middle.csrf.csrf.csrfviewmiddleware.for Django,反cross -cross -site请求伪造功能分为全球和本地。

  全球的:

  中间件django.middleware.csrf.csrfviewmiddleware

  当地的:

  @csrf_protect,即使在设置中没有全局中间件,也强行设置了当前功能的fake -cross -stoite请求。

  @csrf_exempt,即使设置中有全局中间件,取消当前功能抗-cross -Cross -site请求伪造功能。

  注意:来自django.views.decocotors.csrf导入csrf_exempt,csrf_protect

  1.原则

  将csrftoken添加到客户端页面,验证服务器,并由服务器验证的工作由'django.middleware.csrfviewmiddleware..csrfviewmiddleware..ine完成,这有两种捍卫Django中CSRF攻击的方法:

  1.以形式添加csrftoken

  2.将X-CSRFTKEN请求头添加到请求请求。

  注意:Django默认情况下对所有帖子请求进行了CSRFTKOOK验证。如果验证失败,则403错误等待。

  django套装在cookie中

  VUE发送职位403:CSRF失败:CSRF代币任务或不正确的解决方案:

  CSRF,整个战斗是跨场地伪造的。它也被称为一键式攻击或会话骑行。从总体上讲,攻击者发送命令网站接受目标网站,以接受目标网站的命令,以通过用户的浏览器请求执行命令。通常用于窃取帐户,转移,发送虚假新闻等。

  攻击者使用网站的验证漏洞来实现此类攻击行为。该网站可以确认该请求来自用户的浏览器,但无法验证请求是否衍生了用户真实意愿的操作行为。

  CSRF攻击预防方法是什么?

  首先,验证HTTP参考器字段

  HTTP Head中的Referer字段记录了HTTP请求的源地址。在正常情况下,访问有限限制页面的请求来自同一网站,如果黑客想实施CSRF攻击,他通常只能因此,您可以通过验证推荐人值来捍卫CSRF攻击。

  其次,使用验证代码

  关键操作页面加上验证代码。收到请求后,收到请求后可以防御验证代码。但是,此方法对用户不友好。

  第三,将令牌添加到请求地址并验证

  CSRF攻击成功的原因是黑客可以完全构成用户的请求。请求中的所有用户验证信息都存在于cookie中,因此黑客可以在不知道这些验证信息的情况下直接使用用户自己的cookie。通过安全验证。要抵制CSRF,关键是将黑客无法在请求中伪造的信息放置,并且该信息不存在于cookie中。您可以以参数的形式向HTTP请求中添加随机令牌,并在服务器上创建拦截器以验证该令牌。如果“请求”方法中没有令牌或令牌,则比检查转介更安全。可以在用户登录并放入会话后生成令牌,然后从会话中获取每个请求中的令牌,以将其与请求中的令牌进行比较,但是此方法的困难是如何将令牌添加到在请求中的请求参数的形式。

  对于GET请求,令牌将附加到请求地址,以便URL成为:

  对于发布请求,添加输入type =“隐藏” name =“ csrftoken” value =“ tokenvalue”/在表单末尾,以便以参数的形式添加到请求中的令牌。

  第四,HTTP头中的自定义属性并验证

  该方法还使用令牌和验证。与以前的方法不同,并不是说令牌不是以参数的形式放置在HTTP请求中,而是将其放置在HTTP Head的自定义属性中。通过XMLHTTPRequest类,您可以添加HTTP Head属性一次对所有索赔,并将令牌值放入其中。这解决了在请求中向请求中添加令牌的不便;同时,通过XMLHTTPREQUEST请求的请求不会记录到浏览器的地址栏,也不必担心通过引用的代币泄漏到其他网站。

  您需要在表单后面添加csrf_token。

  表单方法=“ post” {%csrf_token%}

  xxx

  /形式

  或修改DJANGO源代码:django/mideware/csrf.py proces_view

  在“#如果用户没有CSRF cookie”上添加以下代码:

  如果request.path.startswith('/admin'):

  返回接受()

  如果Django版本为1.2.5,则修改了修改:

  如果request.path.startswith('/admin'):

  返回self._accept(请求)

  这意味着请求URL是/admin,即使表格背后没有CSRF_Token,您也可以访问它。

  CSRF攻击,完全被称为“跨站点请求伪造”。中文名称是通过跨站点请求伪造的,也称为“一键

  攻击”或“骑行”通常被缩写为CSRF或XSRF,这是对网站的恶意使用。

  XSS主要在网站中使用Trust用户,而CSRF通过掩盖了受信任用户的请求。Compariestaked XSS,CSRF更危险。

  CSRF攻击的伤害:

  主要危害来自攻击者对用户的身份并发送恶意请求。例如:仿真用户发送电子邮件,发送消息,付款,转移等。

  如何捍卫CSRF攻击:

  1.重要的数据交互是通过POST接受的。当然,邮政不是灵丹妙药。可以通过伪造表单来解决。

  2.使用验证代码,只要它涉及数据交互,验证代码验证是先进的,该方法可以完全求解CSRF。

  3.对于用户体验考虑,网站不能向所有操作添加验证代码,因此验证代码只能用作辅助手段,并且不能用作主要解决方案。

  4.验证HTTP参考器字段。此字段记录HTTP请求的源地址。最常见的应用是防盗链。

  5.将令牌添加到每个表单并验证。

  Web应用程序侧防御上的CSRF漏洞,通常使用转介,令牌或验证代码,Nexus

  [7]的文章非常全面;Superhei还提出了旁路的想法[8],请参考他们的文章。

  另一个想法是为客户辩护。似乎可以将其制成类似于HTTP手表的软件。

  截距或过滤器横域cookie在设备上

  Django Post的解决方案为403。据说已添加了CSRF保护的Django1.x。X0DX0AX0DX0ACSRF(跨站点请求伪造伪造请求伪造,也称为“一点击攻击”或通常是骑行缩写为CSRF或XSRF,这是对网站的恶意使用。尽管听起来像是跨站点脚本(XSSS),但它与XSS大不相同,攻击方法几乎是左侧的。XSS使用。信任该网站中的用户,而CSRF根据受信任用户的要求使用伪装的信任网站。与XSS攻击相比,CSRF攻击通常经常攻击。当接受POSX0DX0A在线找到解决方案时,说提交参数中必须有CSRF_Token才能成功。,有三种类型的F我的测试的可靠解决方案:X0DX0A 1:X0DX0A CSRF保护函数。ADD@CSRF_EXEMPT修饰符至视图函数.x0dx0dx0dx0afrom django.views.decocotors.decocotors.decocotors.csrf ofercect.csrf ofercect ofercect ofercect @csrf_exempt @csrf_exempt @csrf_exement ...(request):form = controlform()#here i使用django表返回render(request,'contact.html',{'form':form})x0dxdxdxdxx}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}×例例})x:x?django.shortcuts导入render_to_responsedef联系人(请求):form = contactform()#here我使用了django table return render_to_responsered;白颜色;显示:块;字体大小:10px;保证金:0 0 3PX;填充:4PX 5PX;}发送控制我们{%csrf_token%} {form.subject.errorrors}:{form.subject}}} {form.email.ermail.errrs}}您的邮箱地址:{form.email} {form.email} {form.message.errrs}消息:{form.message}} x0dx0a方法两个显然只有在django模板中受到限制,如果我们使用javascript或ajax?如何添加csrf_token怎么办?x0dx0ax0dx0a?x0dx0ax0dx0a我们可以使用javascript提取上面的csrf_token。编译了如何预防Django中CSRF的所有内容。感谢您花时间阅读此网站。我希望这对您有帮助。有关如何防止CSRF从本网站上找到的有关CSRF的更多信息。