cookie,session、中间件、csrf认证相关【补充】

cookie和session

cookie 客户端浏览器上的键值对----为了做会话保持

怎么来的? 服务端写入的---》服务端再返回的响应头中写入---》浏览器会自动取出来--》存起来
key value 形式--》过期时间---》path---》http only

  • 只要浏览器中有cookie,再次向当前域发送请求,都会自动携带
    • 携带在 请求头中得 cookie字段中
    • cookie:"name=xxx;age=19"
  • 不安全问题---》cookie中发了敏感数据---》客户能看到
    -cookie设置:  obj.set_cookie()-cookie取值:  request.COOKIES.get()-清空:        request.COOKIES.clear()
我们需要让cookie变的安全---》敏感数据不在cookie中方法,而放在session中

    -session是服务端的键值对
    -session跟cookie有什么关系呢?
      

  {111:{name:lqz,age:19,password:123},222:{name:zs,age:19,password:666}}


    -把key,以cookie的形式,存到浏览器中
        sessionid:111
    -当前浏览器以后再发请。就会携带 过来
    -我们根据带过来的cookie 111----》 从 session中取出对应的数据

session的使用---》必须要先迁移表---》django-session表不存在
  • session存在服务端的---》默认情况下存在---》django-session表中
    • 配置文件
    • django项目有两套配置文件:内置一套,项目自己一套
    • SESSION_ENGINE = 'django.contrib.sessions.backends.db'
django-session表的字段
session_key:      sessionid:随机字符串
session_data:    真正的数据--->加密了
expire_date:     过期时间
session的使用
	取值:request.session.get()赋值:request.session['name']='xxx'
session的本质执行原理

    1 咱么写了request.session['name']='xxx',本质就是向session 对象中放入了name=xxx
    2 当前视图函数结束-----》经过 【中间件】 ---》返回给了前端
        -django 内置了一个session中间件
        -判断:request.session 有没有变化,如果有变化
            - 情况一:django-session表中没有数据
                在表中创建出一条数据,随机生成一个字符串[随机字符串session_key],把数据存入django-session表
                session_key:adsfasd
                session_data: name=xxx  加密后存到里面
                把随机字符串写入到cookie中  :sessionid:adsfasd
            - 情况二:django-session表中有数据
                把session中所有的值--》加密后--》更新到django-session表的session_data中,其他不变
    3 下次 再发请求进入任意视图函数---》又会经过  【中间件】---》视图函数
        -视图函数中取session:request.session.get('age')
        -浏览器发请求---》携带cookie过来---》到了中间件---》根据sessionid取出随机字符串
        -拿着随机字符串去django-session中查【session_key】---》 能查到就把 session_data的数据解密---》放到request.session中
        -后续视图函数中,才能取出值

session的中间件把上述内容完成了:procee_request  process_response
django.contrib.sessions.middleware.SessionMiddleware
配置session 存放路径(未完成,需要你完成)
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
SESSION_ENGINE = 'django.contrib.sessions.backends.file'
SESSION_FILE_PATH='c://xxx/x'
SESSION_COOKIE_NAME = 'xxx'
from django.conf import settings
from django.contrib.sessions.backends import 

中间件

中间件是什么

中间件顾名思义,是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。因为改变的是全局,所以需要谨慎实用,用不好会影响到性能

作用
  1. 全局的请求拦截---》如果它没有登录---》就不允许访问
  2. 拦截所有请求,获取请求的ip地址
  3. 记录所有用户的访问日志
  4. 统一在响应头中加数据
代码上:就是一个类,类中有几个方法
process_request(self,request) # 请求来了,就会走
process_response(self, request, response) # 请求走了就会走
process_view(self, request, callback, callback_args, callback_kwargs) #视图函数执行之前调用
process_template_response(self,request,response) # 渲染模板之前会走
process_exception(self, request, exception) # 视图函数中出现异常了才执行

django内置一些中间件---》增强了djagno的功能
request.session
request.user
post 请求提交数据,拦截了---》csrf认证

MIDDLEWARE = ['django.middleware.security.SecurityMiddleware',# session相关的中间件'django.contrib.sessions.middleware.SessionMiddleware',# 公共中间件---》访问不带 / 路径,如果有 带 / 的路径,他会让你重定向到这个地址'django.middleware.common.CommonMiddleware',# csrf认证    xss  cors'django.middleware.csrf.CsrfViewMiddleware',# 认证:request.user--->这个中间件做的'django.contrib.auth.middleware.AuthenticationMiddleware',# django的消息框架---》flask--》闪现'django.contrib.messages.middleware.MessageMiddleware','django.middleware.clickjacking.XFrameOptionsMiddleware',
]
自定义中间件来使用,记录用户的请求地址和user-agent
class SaveRemoteAddr(MiddlewareMixin):def process_request(self, request):# request 是WSGIRequest 的对象# print(request.session) # 一定要保证,session的中间件要在上面# 这个request 就是当次请求的request# 取出ipip = request.META.get('REMOTE_ADDR')user_agent = request.META.get('HTTP_USER_AGENT')print(ip)print(user_agent)# return HttpResponse('不让你看了') # 不会再走视图函数了'''能返回的情况:1 None,表示执行完这个代码,继续往后执行---》还有中间件,继续执行--》最后进视图函数2 四件套,后续不走了,中间件的process_response---》直接返回给浏览器了'''
中间件,在响应头加入访问时间
import datetime
class AddHeaderMiddleWare(MiddlewareMixin):def process_response(self, request, response):# request中有没有session? 有# request 如果在视图函数中,往request中放了值,在这里,就可以取出来 request.xxx# print(request.xxx)# 所有cookie中都带# response.set_cookie('xxxxx', 'asdfds')# 写入到响应头,访问服务端的时间response['ttt'] = datetime.datetime.now()return response  # 一定要返回response对象

csrf认证相关

csrf是什么

      跨站请求伪造

攻击原理

在同一个浏览器中,如果登录了A网站,没有退出,在B网站中,向A网站发送请求,浏览器会自动携带A网站的cookie,对于A网站后端来讲, 它就分辨不清到底是用户真实发的请求,还是黑客网站发的请求【都会携带用户真实的cookie】

如何防范:
	-django解决了这个问题---》只要发送post请求,必须携带一个csrf_token 随机字符串--->后端给的-这个随机字符串可以带的位置?1 请求体中(urlencoded,form-data):{csrfmiddlewaretoken:asdfasdf}2 放在请求头中:'X-CSRFToken':asdfasdfasd3 ajax提交数据:默认是urlencoded,放在请求体中没有任何问题$.ajax({method: 'post',data: {username, password, csrfmiddlewaretoken},success: function (res) {console.log(res)}})4 ajax提交,使用json格式---》就不能放在请求体中只能放在请求头中:$.ajax({method: 'post',headers:{'X-CSRFToken':csrfmiddlewaretoken},contentType: 'application/json',data: JSON.stringify({username, password}),success: function (res) {console.log(res)}})

post 提交的数据,都是从request.POST中取,前提是:必须是urlencoded和form-data格式
如果是json是取不到的

如果使用ajax发送请求

redirect  render就用不了了
 尽量使用JsonResponse

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/199034.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++初学教程一

目录 一、第一个Hello World 程序 二、数据类型与运算符 1、进制转换 2、数据类型

计算机类应届生简历10篇

计算机类应届生简历模板下载(可在线编辑制作):来幻主简历,做好简历! 计算机类应届生简历1: 求职意向 求职类型:全职 意向岗位:计算机相关工作 意向城市:广东广…

【云备份】第三方库

7. 环境搭建-gcc升级7.3版本 sudo yum install centos-release-scl-rh centos-release-scl sudo yum install devtoolset-7-gcc devtoolset-7-gcc-c source /opt/rh/devtoolset-7/enable echo "source /opt/rh/devtoolset-7/enable" >> ~/.bashrc[sanlocalh…

#Django事务#

事务实现方式 1:基于装饰器实现 transaction.atomic def my_view(request): #处理操作 #操作数据1 #操作数据2 当HTTP相应码是500,事务回滚 2:使用with语句 from django.db import transaction def my_view(request): with transaction.atomic() …

二维码智慧门牌管理系统升级:强化信息安全的防伪技术

文章目录 前言一、解决方案概览二、具体措施 前言 随着二维码智慧门牌管理系统在城市管理、企业形象展示和商铺门店等领域的广泛应用,信息安全问题愈发凸显。如何保障二维码门牌信息的安全性成为当前迫切需要解决的难题。 一、解决方案概览 专码专用:每…

尚硅谷hadoop3.x课程部分资料文件下载,jdk,hadoopjar包

最近在学hadoop时候,尚硅谷的资料太多,百度云要会员才能下载完,然后到网上找发现好像没有jdk与hadoop包一起分享的。 jdk文件百度云下载: 链接:https://pan.baidu.com/s/1MCiGRzOZY8rAFpRJwA3tdw 提取码:…

奔三程序员的迷茫与思考

现状 我是97年的,今年26了。刚毕业的时候,在网上看到大龄程序员对于未来的忧虑,总是觉得离自己很遥远。一腔热血,心中充满了对于未来的憧憬,觉得等自己年龄大了,一定不会有这些烦恼。那些会产生大龄程序员…

【SQL 基础教程】w3school-SQL-基础知识-总结笔记

SQL-基础-笔记 一、简介 1:什么是 SQL? SQL 是用于访问和处理数据库的标准的计算机语言。 SQL 指结构化查询语言 SQL 使我们有能力访问数据库 SQL 是一种 ANSI 的标准计算机语言 2:SQL 能做什么? SQL 可在数据库中插入新的记录、删…

xxl-job安装部署

官方地址中文版:http://www.xuxueli.com/xxl-job githuab源码: https://github.com/xuxueli/xxl-job/releases 码云地址:https://gitee.com/xuxueli0323/xxl-job XXL开源社区:分布式任务调度平台XXL-JOB 配置部署“调度中心” …

谢宁老师受邀在浙商企业家研习班中讲授华为战略规划SP实践(业务领先模型BLM)

随着全球经济持续的发展与变革,企业家们正面临着前所未有的挑战和机遇。如何在不断变化的市场环境中保持稳健发展,如何进行高效的投资,是众多企业家必须深思的重要问题。 为了协助企业家们更好地应对这些挑战,近日,在…

python超详细基础文件操作【建议收藏】

文章目录 前言1 文件操作1.1 文件打开与关闭1.1.1 打开文件1.1.2 关闭文件 1.2 访问模式及说明 2 文件读写2.1 写数据(write)2.2 读数据(read)2.3 读数据(readlines)2.3 读数据(readline&#x…

配置Jira安全管理员会话

JIRA 要求用户必须通过一个安全管理会话使用 JIRA 管理屏幕,从而保护对其管理功能的访问。(这也称为 websudo。)当 JIRA 管理员(已登录到 JIRA)尝试访问管理功能时,系统将提示他们再次登录。这将使管理员登…

前端模拟新闻列表ajax请求 mocky

效果图&#xff1a; <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title> </head><style>ul {display: flex;flex-wrap: wrap;justify-content: space-between;}ul::after{content: ;width: 30%;}a…

数据结构——链表题目

文章目录 JZ25 合并两个排序的链表&#xff08;简单&#xff09;NC22 合并两个有序的数组&#xff08;简单&#xff09;NC3 链表中环的入口节点&#xff08;中等&#xff09;NC50 链表中的节点每k个一组翻转&#xff08;中等&#xff09;NC53 删除链表的倒数第n个节点(中等) JZ…

独立开发者都使用了哪些技术栈?

目录 一、前言 架构展示&#xff1a; 技术栈展示&#xff1a; 二、JNPF-JAVA-Cloud微服务 1.后端技术栈 2. 前端技术栈 Vue3技术栈 3. 数据库支持 一、前言 像独立开发者这类人群&#xff0c;也可以把他们理解为个人开发者/自由职业者。有一组数据显示&#xff0c;在美国&#…

冰 蝴 蝶

“冰蝴蝶”是一种自然景观&#xff0c;出现在每年的12月至次年2月间。在温度、湿度、风力、风向合适时&#xff0c;在山野间的枯草或灌木丛上会结出如“蝴蝶”一样的纤薄冰片&#xff0c;因此被称为“冰蝴蝶”。 受持续降温影响&#xff0c;12月3日&#xff0c;在山西闻喜县裴…

python实现FINS协议的UDP服务端

python实现FINS协议的UDP服务端是一件稍微麻烦点的事情。它不像modbusTCP那样&#xff0c;可以使用现成的pymodbus模块去实现。但是&#xff0c;我们可以根据协议帧进行组包&#xff0c;自己去实现帧的格式&#xff0c;而这一切可以基于socket模块。本文基于原先 FINS协议的TCP…

处理k8s中创建ingress失败

创建ingress&#xff1a; 如果在创建过程中出错了&#xff1a; 处理方法就是&#xff1a; kubectl get ValidatingWebhookConfiguration kubectl delete -A ValidatingWebhookConfiguration ingress-nginx-admission 然后再次创建&#xff0c;发现可以&#xff1a;

spdlog 简介与基础示例

0. 概况 0.1 源码搭建环境 源码网址&#xff1a; GitHub - gabime/spdlog: Fast C logging library. 可以只是用头文件&#xff0c;也可以先编译后使用&#xff1b;后面的示例都是直接使用头文件的方式。 编译方法&#xff1a; $ git clone https://github.com/gabime/spd…

推荐5个节省90%精力的GitHub工具库

下面五个GitHub工具库可节约你大部分时间&#xff0c;提升效率&#xff1a; 1、Trigger.dev 如果您有长时间运行的作业&#xff0c;请在应用中实现Trigger。 使用 API 集成、Webhooks、调度和延迟等功能直接在代码库中创建长时间运行的作业。 例如&#xff0c; 当用户升级他们…