zoukankan      html  css  js  c++  java
  • 利用django中间件CsrfViewMiddleware防止csrf攻击

    一、在django后台处理

    1、将django的setting中的加入django.contrib.messages.middleware.MessageMiddleware,一般新建的django项目中会自带的。

    MIDDLEWARE_CLASSES = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',

    这里中建间的顺序可以调整

    2、在templete的html页的from中添加{% csrf %},后台重定向语法如下:

    return render_to_response(xxx.html', context_instance=RequestContext(request))

    二、前端处理

     对所有的ajax请求加上以下语句:

    $(function () {
    $.ajaxSetup({
    data: {csrfmiddlewaretoken: '{{ csrf_token }}'},
    });
    })

    这样向后台的请求都会带django生成的那个csrf_token值。中间件csrf模块会截取判断csrf_token值是否一致,如果一致则请求合法。

    三、对于ajax的复杂对象,例如[{"id":"001","name":"小明"},{"id":"002","name":"小军"}].,后台post的处理

    必须将这种对象转化为json格式传到后台,后台在反序列化即可。(不要用ajax的其他序列化格式,其深度序列化后,django后台解析比较困难)

    contentType不需要指定utf-8,否则post解析出错

    四、csrf攻击与预防

    csrf利用session和cookie的时效性进行攻击。他会获取请求的cookie,在session时效内进行请求。因此对于重要信息,重要功能进行单次请求处理。即请求一次失效。

    例如:请求头中加入验证token信息,用完即失效。django的中间件csrf_token就是此原理防止的。

    五、django中间件

    这里简单说一下django的中间件

    我们从浏览器发出一个请求 Request,得到一个响应后的内容 HttpResponse ,这个请求传递到 Django的过程如下:

    也就是说,每一个请求都是先通过中间件中的 process_request 函数,这个函数返回 None 或者 HttpResponse 对象,如果返回前者,继续处理其它中间件,如果返回一个 HttpResponse,就处理中止,返回到网页上。

    我们可以据此做很多关于网络攻击的安全防护。比如:拦截器,过滤器,防止xss攻击 等等。

    django中间件参考https://code.ziqiangxuetang.com/django/django-middleware.html

  • 相关阅读:
    oracle 数据库安全审计
    oracle 共享服务器监控
    oralce MTS
    配置一个Oracle共享服务器进程环境需要哪两项参数
    python3 小技巧(2)
    python3 操作注册表
    PYC文件简介
    常见HTTP状态(304,200等)
    用Python模拟浏览器操作
    python3下的IE自动化模块PAMIE
  • 原文地址:https://www.cnblogs.com/lovenethui/p/9760382.html
Copyright © 2011-2022 走看看