• cookie和session-csrf防护-中间件


    cookie概念: 是由服务器生成,保存在浏览器端的一小段文本信息。
    cookie特点:
    1) cookie是以键值对进行存储的。
    2) 浏览器访问网站时,会将本地保存的跟网站相关的所有cookie发送给网站的服务器。
    3) cookie是基于域名安全的。
    4) cookie是有过期时间的,默认关闭浏览器之后过期。
    设置cookie: set_cookie(key, value, max_age='过期时间')。
    读取cookie: request.COOKIES(保存浏览器发过来的cookie信息)
    删除cookie. delete_cookie(key)
    
    
    session概念: 保存在服务器端的文本信息,默认保存在服务器端的django_session表中。
    sesssion特点:
    1) session也是以键值对进行存储的。
    2) session依赖于cookie, session信息对应的唯一标识默认保存在sessionidcookie中。
    3) session是有过期时间的,默认两周之后过期。
    
    设置session: request.session['键']='值'
    获取session: 变量 = request.session['键']
    删除session: request.session.flush()
    设置session的过期时间: request.session.set_expire('秒数')
    扩展:
    1) django_session表中是由INSTALLED_APPS中的'django.contrib.sessions'应用生成的。
    2) session的存储需要借助于MIDDLEWARE_CLASSES中的
    'django.contrib.sessions.middleware.SessionMiddleware'中间件。
    3) 可以通过SESSION_ENGINE配置session存储在什么地方。
    
    
    csrf跨站请求伪造:
    如果用户登录了网站,并且未退出, 点击了伪造链接,浏览器就会以登录用户的身份去访问A网站,可能会造成密码的的修改和财产的损失等,这就是csrf请求伪造(跨站请求伪造)。
     
    Django框架针对post提交数据具有csrf的防护验证,如果需要使用Django的csrf防护,
    需要按以下步骤:
    1) 打开Django配置文件中的csrf防护中间件。

    2)在使用表单post提交时,需要在表单中加上{ % csrf_token % }标签。
    如果是ajax post请时,也需要在页面上加上{ % csrf_token % }标签。

    防御原理: 1) 访问页面时,django会把{ % csrf_token % }标签替换为一个名为csrfmiddlewaretoken的隐藏域。 2)同时django网站会让浏览器保存一个名为csrftoken的cookie信息。 3)在进行表单提交或者ajax post提交时,csrfmiddlewaretoken隐藏域的值和crsftoken cookie的值 都会被提交给服务器,django框架中的csrf防护中间件会对这两个值进行对比,如果一致,则csrf验 正通过,可以进行后续操作,否则出现403错误。


    中间件流程
    request对像产生: 请求到达Django框架内部时,Django框架会把请求报文中的请求信息封装在request对象的属性中
    ===>依次从上到下调用MIDDLEWARE_CLASSES注册中间件类中的process_request函数
    ===>
    根据请求的url地址进行匹配
    ===>依次从上到下调用MIDDLEWARE_CLASSES注册中间件类中的process_view函数
    ===>
    调用视图函数
    ===>依次从下到上调用MIDDLEWARE_CLASSES注册中间件类中的process_view函数


     
  • 相关阅读:
    Make a web page as screensaver
    python写入sqlserver中文乱码问题
    单片机中的ROM,RAM和FLASH的作用
    单片机STM32F4系统内部中断和外部中断优先级问题
    单片机AHB和APB
    嵌入式编程中一些常用的转换函数
    'AVStream::codec': 被声明为已否
    Python安装Python_snappy安装失败
    .net core 数据库问题
    .net 5.0 中 CrystalQuartz 增加授权校验
  • 原文地址:https://www.cnblogs.com/snailon/p/9021654.html
Copyright © 2020-2023  润新知