1 怎么对存储的cookie数据进行加密

  利用response对象去设置cookie时,存储到浏览器中的cookie数据都是明文的,容易被一些计算机爱好者利用;利用session存的cookie数据可以防止,因为session存储cookie数据时是经过加密的

  1.1 利用response对象存cookie数据的格式

    resp.set_cookie('userId', str(user.id), max_age=age)

    获取存入的cookie数据的格式(利用request对象进行获取)

      userId = request.cookies.get('userId', None)

  1.2 利用session对象存cookie数据逇格式

    session['userId'] = str(user.id)

    获取存入的cookie数据的格式(直接利用session对象进行获取)

      userId = session.get('userId', None)

  1.3 注意

    flask中的session就是存在cookie中的字典,并且这些数据都是进过加密的,可以实现维持状态的功能,但是这些数据可以被破解但是不能够被伪造

  1.4 利用session对象操作cookie数据

    1.4.1 从flask中导入session对象

      from flask import session

    1.4.2 在flask的配置文件中配置秘钥

      import os
      SECRET_KEY = os.urandom(24) # 利用session存cookie数据的时候会用到

      注意:如果不配置那么在设置cookie时机会报下面的错误

        

    1.4.3 设置cookie、获取cookie

      

      注意:

        

  1.5 session的种类

    1.5.1 cookie信息经过加密后直接放在前台

      优点:能够缓解服务器压力

      缺点:不能够保证数据不被解密,但是能够保证数据不被伪造

      经典应用:将记录的ID进行加密后直接作为cookie数据存放到前台(注意:这里的ID一般都是采用的UUID)

    1.5.2 在服务端通过数据库生成随机码来作为cookie数据

      数据库中的每条记录都对应一个唯一的随机码,将这个随机码放到cookie中,这样在前台就只能够看到随机码,用户的数据都在后台

      例如:

        

      原理解释:

        用户登录成功后,根据用户的信息到数据库中去获取对应的随机码并将其放到cookie中;下次访问相同请求时将随机码给到后台,后台会根据这个随机码去判断用户是否已经登录过

      优点:信息完全保密,状态保存在后台,可控性更好

      缺点:服务器压力大

    

2 跨站请求伪造是怎么工作的

  百度百科:点击前往

    攻击网站利用正常用户的session数据去访问正常网站

  2.1 CSRF攻击原理

    

  2.2 防止CSRF攻击

    保证所有的post表单,不能以session作为唯一的判断标准;再另外添加一个标准,这个标准对自己的网站是符合的,对别人的网站是失效的;例如:在session中添加一个随机码,在表单中添加一个随机码,这两个随机码保持一致

    2.2.1 创建一个方法用来产生令牌

      

      注意:该方法必须在模板中调用,该方法执行时会将同一个令牌存入到session中去,并将相同的令牌返回(想要在模板中调用这个自定义的方法就必须进行声明,使其成为全局的)

    2.2.2 声明自定义方法为全局变量

      app.jinja_env.globals.update({'gen_token':gen_token}) # 将gen_token方法放到模板的全局变量中去

    2.2.3 在模板中调用这个方法

      <input type="hidden" name="csrf_token" value="{{ gen_token() }}" />

    2.2.4 编写一个在请求之前的过滤函数

      该过滤函数用来过滤所有的POST请求,只要是POST请求就判断表单中的令牌和session中的令牌是否一致,如果一致就通过,否则就报错

      

3 注销session

  就是清空session

  

4 登录成功后直接跳转到目标页面

  在访问一个需要登录的页面时,如果用户还没有进行登录,那么就会进入登录页面;当用户录入登录信息登录成功后自动跳转到之前用户要访问的目标页面

  4.1 在重定向到登录页面的时候利用url_for方法传入请求路径的端点

    

  4.2 进入到登录页面时将登录页面路径的参数获取到并传给模板进行渲染

    

    

  4.3 在用户录入登录信息并验证成功后就根据表单中的端点信息,自动跳转到目标页面

    

5 本博客源代码

  点击前往

    

Flask11 Session、CSRF、注销session、利用端点自动跳转的更多相关文章

  1. 后台session过期,tomcat重启,自动跳转页面js写法

    if (window != top) { //top.location.href = location.href;//因为系统分为普通用户和后台,所以暂时写死 if(top.location.href ...

  2. 35.HTML--网页自动跳转 5种方法

    网页自动跳转 5种方法 利用HTML标记(META中的REFRESH属性) 用HTML标记,就是用META的REFRESH标记,举例如下: <meta http-equiv=refresh co ...

  3. Django(5) session登录注销、csrf及中间件自定义、django Form表单验证(非常好用)

    一.Django中默认支持Session,其内部提供了5种类型的Session供开发者使用: 数据库(默认) 缓存 文件 缓存+数据库 加密cookie 1.数据库Session 1 2 3 4 5 ...

  4. Python自动化运维 - Django(三)CSRF - Cookie&Session

    CSRF跨站请求伪造 CSRF跨站点请求伪造(Cross—Site Request Forgery),跟XSS攻击一样,存在巨大的危害性,你可以这样来理解:攻击者盗用了你的身份,以你的名义发送恶意请求 ...

  5. Django 进阶篇之 CSRF,COOIKE,SESSION

    1.CSRF(Cross Site Request Forgery, 跨站域请求伪造) CSRF 背景与介绍 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网 ...

  6. cookie、session及实现记住密码,自动登录

    在登录帐号.密码框下,有三种帐号登录模式可供选择,用户可根据自己的具体情况选择其中一种适合自己的模式. 1.网吧模式:勾选网吧模式后,登录的帐号会在歪歪注销/退出的时候自动清除,不会留在登录框中,可以 ...

  7. nginx+iis+redis+Task.MainForm构建分布式架构 之 (redis存储分布式共享的session及共享session运作流程)

    本次要分享的是利用windows+nginx+iis+redis+Task.MainForm组建分布式架构,上一篇分享文章制作是在windows上使用的nginx,一般正式发布的时候是在linux来配 ...

  8. cookie和session的区别,session的生命周期,

    这些都是基础知识,不过有必要做深入了解.先简单介绍一下. 二者的定义: 当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择, 都纪 ...

  9. [原创]java WEB学习笔记31:会话与状态管理 session机制 概述(定义,session机制,session的声明周期,保存session的方式,Session的创建与删除)

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

随机推荐

  1. ubuntu14.04 pygame安装 python2.7

    系统:ubuntu14.04 LTS amd64python版本:2.7.6pygame版本:1.9.1release别这种方法了,这么安装不知道什么原因就出现了问题,在使用pygame.image. ...

  2. DEV开发之控件NavBarControl

    右键点击RunDesigner弹出如下界面鼠标先点击3或4,1,,然后点击1或2进行相应的新增或删除操作,3是分组,4是项目,4可以直接拖动到相应的分组3.属性caption:显示的名称4.NavBa ...

  3. [原创]java WEB学习笔记14:JSP的9 个隐含对象 及 JSP 的基本语法

    本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...

  4. web前端框架之自定义form表单验证

    自定义form验证初试 .在后端创建一个类MainForm,并且在类中自定义host ip port phone等,然后写入方法,在post方法中创建MainForm对象,并且把post方法中的sel ...

  5. 如何搭建一个GitHub在自己的服务器上?

    摘自:http://blog.csdn.net/yangzhenping/article/details/43937595

  6. 纯CSS3实现的动感菜单效果

    1. [代码] 纯CSS3实现的动感菜单效果 <!DOCTYPE html><head><meta http-equiv="Content-Type" ...

  7. HDU 4123 Bob's Race:树的直径 + 单调队列 + st表

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4123 题意: 给你一棵树,n个节点,每条边有长度. 然后有m个询问,每个询问给定一个q值. 设dis[ ...

  8. php构造函数的继承方法

    第一种情况:子类没有定义构造函数时,默认继承.例子: ? 1 2 3 4 5 6 7 8 9 10 11 12 <?php class A{  public $name;  function _ ...

  9. 分享知识-快乐自己:Liunx 搭建 Dubbo

    1.首先配置JDK  操作步骤 2.部署 Tomcat ① 上传 Tomcat 7  解压jdk文件:tar -zxvf jdk文件名称 ② tomcat目录下的bin/启动tomcat ③ tail ...

  10. WEB安全之Token浅谈

    Token一般用在两个地方——防止表单重复提交.anti csrf攻击(跨站点请求伪造). 两者在原理上都是通过session token来实现的.当客户端请求页面时,服务器会生成一个随机数Token ...