Django CSRF跨站请求伪造防护过程解析

 更新时间:2019年07月31日 09:13:50   作者:Tanglaoer  
这篇文章主要介绍了Django CSRF跨站请求伪造防护过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

前言

CSRF全称Cross-site request forgery(跨站请求伪造),是一种网络的攻击方式,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF。

攻击原理

1、用户访问正常的网站A,浏览器就会保存网站A的cookies。

2、用户在访问恶意网站B, 网站B上有某个隐藏的链接会自动请求网站A的链接地址,例如表单提交,传指定的参数。

3、恶意网站B的自动化请求,执行就是在用户A的同一个浏览器上,因此在访问网站A的时候,浏览器会自动带上网站A的cookies。

4、所以网站A在接收到请求之后,可判断当前用户登录状态,所以根据用户的权限做具体的操作逻辑。

防范措施

1、在指定表单或者请求头的里面添加一个随机值做为参数。

2、在响应的cookie里面也设置该随机值。

3、用户正常提交表单的时候会默认带上表单中的随机值,浏览器会自动带上cookie里面的随机值,那么服务器下次接受到请求之后就可以取出两个值进行校验。

4、对于网站B来说网站B在提交表单的时候不知道该随机值是什么,所以就形成不了攻击。

Django中CSRF中间件

django在创建项目的时候,默认就会有添加中间进行CSRF的保护,在MIDDLEWARE可以看到加载了 django.middleware.csrf.CsrfViewMiddleware 的中间件,这里是全局设置,也可以局部设置。

全局保护:直接启用中间件就可以了。

局部保护: from django.views.decorators.csrf import csrf_exempt,csrf_protect ,使用装饰器进行验证。

csrf_protect :为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件;

csrf_exempt :取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。

验证

在POST请求提交数据的时候,django会去检查是否有一个csrf的随机字符串,如果没有就会返回403没有权限访问。

表单验证

在form表单里面需要添加{%csrf_token%},Django会自动渲染隐藏的input输入框:

<input type="hidden" name="csrfmiddlewaretoken" value="2Sb0DQwDVgOQ8i3n1BaG1MUPLEYr6ZGaCLYa14maOQM0Ami5ddQOR6hfXuD2mrmA">

在表单提交的时候,中间件会验证csrfmiddlewaretoken。

通过ajax提交

通过cookies获取到csrftoken,

function getCookie(name) {
  var r = document.cookie.match("\\b" + name + "=([^;]*)\\b");
  return r ? r[1] : undefined;
}
$.ajax({
  url:"/api/v1.0/orders",
  type:"POST",
  data: JSON.stringify(data),
  contentType: "application/json",
  dataType: "json",
  headers:{
    "X-CSRFtoken":getCookie("csrf_token"),
  },

局部禁用或者启用

1、如果是函数视图,可以直接在函数加上装饰器即可:

from django.views.decorators.csrf import csrf_exempt,csrf_protect
@csrf_exempt
def login(request):
  if request.method == 'GET':
    return render(request,'login.html')
  else:
    return HttpResponse('ok')

2、如果是类视图,需要使用方法装饰器进行封装

from django.utils.decorators import method_decorator
from django.views.decorators.csrf import csrf_exempt,csrf_protect
from django.views.generic import TemplateView

@method_decorator(csrf_exempt)
class LoginView(TemplateView):
  template_name = 'login.html'
  def post():
    return HttpResponse('ok')

3、直接装饰as_view()方式,在URLconf里面设置。

from django.views.decorators.csrf import csrf_exempt,csrf_protect
urlpatterns = [
  path('login/', csrf_exempt(LoginView.as_view()),name="login"),
]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Dephi逆向工具Dede导出函数名MAP导入到IDA中的实现方法

    Dephi逆向工具Dede导出函数名MAP导入到IDA中的实现方法

    这篇文章主要介绍了Dephi逆向工具Dede导出函数名MAP导入到IDA中,通过这个脚本,我们就可以把专业dephi程序分析的结果,转移到IDA专业逆向代码分析的平台,实现联动,需要的朋友可以参考下
    2022-08-08
  • Python实现轻松读取大文件的技巧揭秘

    Python实现轻松读取大文件的技巧揭秘

    Python提供了多种方法来读取文件内容,其中包括read()、readline()和readlines()三个常用的函数,本文将深入探讨这三个函数的使用方法,需要的可以参考一下
    2023-08-08
  • 浅谈对yield的初步理解

    浅谈对yield的初步理解

    下面小编就为大家带来一篇浅谈对yield的初步理解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • python可以用哪些数据库

    python可以用哪些数据库

    在本篇文章里小编给大家整理的是关于python支持哪些数据库的相关知识点内容,有兴趣的朋友们可以学习下。
    2020-06-06
  • Python字符串与正则表达式详细介绍

    Python字符串与正则表达式详细介绍

    这篇文章主要介绍了Python字符串与正则表达式,Python字符串与正则表达式在Python中具有非常重要的地位,熟练的使用字符串与正则表达式能够为我们的Python编程提供很多的便利之处,希望您阅读完本文后能够有所收获
    2022-01-01
  • opencv canny边缘检测算法详解

    opencv canny边缘检测算法详解

    本文主要介绍了opencv canny边缘检测算法详解,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-03-03
  • windows及linux环境下永久修改pip镜像源的方法

    windows及linux环境下永久修改pip镜像源的方法

    不知道有没有人跟我一样,在刚接触Linux时被系统更新源问题搞得晕头转向,不同的Linux更新源配置也是不一样的,另外由于默认安装时的源大都是外国的更新源,速度相对国内会慢很多,接下来本文主要介绍在windows和linux两种系统环境中更新系统源的方法。
    2016-11-11
  • PyCharm 2021.2 (Professional)调试远程服务器程序的操作技巧

    PyCharm 2021.2 (Professional)调试远程服务器程序的操作技巧

    本文给大家分享用 PyCharm 2021 调试远程服务器程序的过程,通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2021-08-08
  • 使用Python的web.py框架实现类似Django的ORM查询的教程

    使用Python的web.py框架实现类似Django的ORM查询的教程

    这篇文章主要介绍了使用Python的web.py框架实现类似Django的ORM查询的教程,集成的ORM操作数据库向来是Python最强大的功能之一,本文则探讨如何在web.py框架上实现,需要的朋友可以参考下
    2015-05-05
  • python使用SMTP发送qq或sina邮件

    python使用SMTP发送qq或sina邮件

    这篇文章主要为大家详细介绍了python使用SMTP发送qq或sina邮件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10

最新评论