zoukankan      html  css  js  c++  java
  • Token安全

    token相对安全加密算法

    http://blog.csdn.net/q8649912/article/details/52370565

    关于文章的理解

    1 sessionid

    这个名词应该理解为:一个http客户端在服务端的一个标识,仅此而已,他唯一性的标识了一个客户端,但是其作用却很关键,他的关键作用在于token的生成。

    2 真实的http登陆请求详细过程(非前后端分离,如jsp,asp.net)

    1)浏览器无论如何都会向服务器发送一次请求,服务器获取sessionid和token,判断有无登录。如果没有,那么生成密钥对,缓存sessionid,将公钥和sessionid发送到http响应中,也就是交给客户端,重定向到登陆页

    2)浏览器提交登陆表单,携带sessionid,和使用公钥加密的密码,服务区接收到这些信息,这时候sessionid唯一性的标识客户端很关键,通过sessionid拿到缓存在服务器的私钥,进行密码解密,解密后完成用户名,密码验证。接下来降低sessionid的关键作用一步,在验证通过后生成token,使用token为关键点缓存登陆会话相关信息,如权限等。服务器将sessionid,使用客户端公钥加密token交给客户端

    3)客户端用私钥解密token,由于rsa加密算法每次加密结果都不一样,所以这里在浏览器与服务器传输中的加密token一直处于变化中。客户端完成相关操作后向发服务器再次发生请求,私钥加密token,将sessionid和token一些其他起脚信息交给服务器,这个时候就算是黑客拿到token,sessionid也没有用

    4)服务器接收将token解密,然后获取token映射的信息进行处理,即便是黑客能够拿到这一次的加密token,请求成功,服务器加密后返回给客户端,客户端需要正确解密和加密后才会进入下一次交互过程,如果服务端发现黑客还是拿着上一次的token来请求自然就会解密失败,自然的请求也就失败了

    5)作为黑客来说吃亏就在于rsa每一次加密结果不一致造成的,那么黑客可以分析客户端的加解密程序,并拿到私钥才能进行伪装成功,但这也是比较费技术的,那么另外一种就是每一次都可以截取正常加密后的token就可以很好的伪装了

    6)为了解决这个问题呢,引入证书了,由于证书的存在,即便是你每次能截取到加密token但是没有证书相关信息也是不行的

    7)大魔法ssl可以非常有效解决这种问题,但是ssl非常复杂,我也不咋个了解,所以暂时就这样吧

    3 sessionid的生命周期sessionid在密码验证,token生成过程中非常关键,也就是验证过程,但是之后就失去了这个关键作用了。这个作用失去就是在会话维持阶段基本没什么用了。

  • 相关阅读:
    跨域请求携带cookie
    vue单文件组件实例1:简单单文件组件
    vue单文件组件实例2:简单单文件组件
    vue路由1:基本使用
    项目中常用的javascript/jquery操作
    vue计算属性和侦听器
    专题8:javascript中事件
    普通文件的上传(表单上传和ajax文件异步上传)
    python导入包出错:ImportError: No module named XXXXX

  • 原文地址:https://www.cnblogs.com/rjjs/p/7088503.html
Copyright © 2011-2022 走看看