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函数
cookie和session-csrf防护-中间件的更多相关文章
- Python 之 Django框架( Cookie和Session、Django中间件、AJAX、Django序列化)
12.4 Cookie和Session 12.41 cookie Cookie具体指的是一段小信息,它是服务器发送出来存储在浏览器上的一组组键值对,下次访问服务器时浏览器会自动携带这些键值对,以便服务 ...
- Django(六)Session、CSRF、中间件
大纲 二.session 1.session与cookie对比 2.session基本原理及流程 3.session服务器操作(获取值.设置值.清空值) 4.session通用配置(在配置文件中) 5 ...
- Django实现表单验证、CSRF、cookie和session、缓存、数据库多表操作(双下划綫)
通常验证用户输入是否合法的话,是前端js和后端共同验证的,这是因为前端js是可以被禁用的,假如被禁用了,那就没法用js实现验证合法与否了,也就是即使用户输入的不合法,但是也没提示,用户也不知道怎么输入 ...
- Django之Form、CSRF、cookie和session
Django是一个大而全的web框架,为我们提供了很多实用的功能,本文主要介绍Form.CSRF.cookie和session 一.Form 在web页面中form表单是重要的组成部分,为了数据安全和 ...
- python_way day19 HTML-day5 (form表单验证,CSRF,cookie,session,缓存)
python-way day19 1. dJango的form表单验证 2.CSRF 跨站请求伪造 3.cookie,session 4.缓存 一,django表单验证功能 1.django验证基础: ...
- Day19 Django之Form表单验证、CSRF、Cookie、Session和Model操作
一.Form表单验证 用于做用户提交数据的验证1.自定义规则 a.自定义规则(类,字段名==html中的name值)b.数据提交-规则进行匹配代码如下: """day19 ...
- Django之Cookie、Session、CSRF、Admin
Django之Cookie.Session.CSRF.Admin Cookie 1.获取Cookie: 1 2 3 4 5 6 request.COOKIES['key'] request.get ...
- cookie 和 session 的一些事 中间件
cookie 和 session cookie 1. 保存在浏览器上一组组键值对,服务器让浏览器进行设置. 2. 为什么要用cookie? HTTP协议是无状态.使用cookie保存状态. 3. dj ...
- Django进阶(路由系统、中间件、缓存、Cookie和Session、Ajax发送数据
路由系统 1.每个路由规则对应一个view中的函数 url(r'^index/(\d*)', views.index), url(r'^manage/(?P<name>\w*)/(?P&l ...
随机推荐
- Js数组排序以及对象排序
封装排序方法 对象排序方法 function compare(arr,styleName){ arr.sort((a,b)=>{ let x=a[styleName]; let y=b[styl ...
- PHP搭建大文件切割分块上传功能示例
转载:https://www.jb51.net/article/101931.htm 背景 在网站开发中,文件上传是很常见的一个功能.相信很多人都会遇到这种情况,想传一个文件上去,然后网页提示“该文件 ...
- python - scrapy 爬虫框架(创建, 持久化, 去重, 深度, cookie)
## scrapy 依赖 twisted - twisted 是一个基于事件循环的 异步非阻塞 框架/模块 ## 项目的创建 1. 创建 project scrapy startproject ...
- Python中日志logging模块
# coding:utf-8 import logging import os import time class Logger(object): def __init__(self): # 创建一个 ...
- VBA字典
'字典并不存在于VBA中,需要调用 '调用方式1(前期绑定): '工具 --引用 - -浏览 - -找到scrrun.dll - 确定 '调用方式2 (后期绑定): ' Set d = CreateO ...
- 30、[源码]-AOP原理-注册AnnotationAwareAspectJAutoProxyCreavi
30.[源码]-AOP原理-注册AnnotationAwareAspectJAutoProxyCreavi
- java+web+下载断点续传
1.先将 webuploader-0.1.5.zip 这个文件下载下来:https://github.com/fex-team/webuploader/releases 根据个人的需求放置自己需要的 ...
- [转]protobuf的编译安装
github地址:https://github.com/google/protobuf支持多种语言,有多个语言的版本,本文采用的是在centos7下编译源码进行安装. github上有详细的安装说明: ...
- 爬虫(十):scrapy命令行详解
建爬虫项目 scrapy startproject 项目名例子如下: localhost:spider zhaofan$ scrapy startproject test1 New Scrapy pr ...
- spring boot 对某个接口进行次数限制,防刷。简易版。demo。
一般的项目 如果没有做防刷 容易被人爆接口 或者就是说没有做token防刷过滤. 容易被人用正常的token刷接口.有些token非一次性. 用户登录之后生成token会有一个过期时间,但一般没有做频 ...