zoukankan      html  css  js  c++  java
  • 新人开车——认证与会话管理

    一、概念

      1、认证的目的是为了认出用户是谁,授权的目的是为了决定用户能够做什么。

      2、认证实际上就是一个验证凭证的过程。

      3、如果只有一个凭证被用于认证,则称为“单因素认证”;如果有两个或者多个凭证被用于认证,则称为“双因素认证”或者“多因素认证”。一般来说,多因素认证的强度要高于单因素认证。

    二、说说密码

      1、密码是最常见的一种认证手段,持有正确密码的人被认为是可信的。“密码强度” 是设计密码认证方案时第一个需要考虑的问题。

      2、黑客们常用的一种暴力破解手段,不是破解密码,而是选择一些弱口令,比如123456,然后去猜解用户名,知道发现一个使用弱口令的账户为止。由于用户名往往是公开的信息,攻击者可以收集一份用户名的字典,是的这种攻击的成本非常低,而效果却比暴力破解密码要好很多。

      3、密码的保存也有一些需要注意的地方。一般来说,密码必须以不可逆的加密算法,或者是单向散列函数,机密后存储在数据库中。将明文密码经过哈希后(比如MD5或者SHA-1)再保存到数据库中,是目前业界比较普遍的做法——在用户注册时就已经将密码哈希后保存在数据库中,登录时验证密码的过程仅仅是验证用户提交的“密码”哈希值,与保存在数据库中的“密码”哈希值是否一致。目前黑客们广泛使用的一种破解MD5后密码的方法是“彩虹表”。彩虹表的思路是收集尽可能多的密码明文和明文对应的md5值。这样只需要查询md5值,就能找到该md5值对应的明文。为了避免密码哈希值泄漏后,黑客能够直接通过彩虹表查询出密码明文,在计算密码明文的哈希值时,增加一个“salt”。“salt”是一个字符串,它的作用是为了增加明文的复杂度,并能使得彩虹表一类的攻击失效。

      salt的使用如下:

        MD5(username+password+salt)

      salt应该保存在服务器端的配置文件中,并妥善保存。

    三、session与认证

      当用户登录完成后,在服务器端就会创建一个新的会话(session),会话中会保存用户的状态和相关信息。服务器端维护所有在线用户的session,此时的认证,只需要知道是哪个用户在浏览当前的页面即可。为了告诉服务器应该使用哪一个session,浏览器需要把当前用户持有的sessionID告诉服务器。常见的做法就是把sessionID加密后保存在cookie中,因为cookie会随着HTTTP请求头发送,且受到浏览器同源策略的保护。

      session劫持就是一种通过窃取用户sessionID后,使用该sessionID登录进目标账户的攻击方法,此时攻击者实际上是使用了目标账户的有效session。如果sessionID是保存在cookie中的,则这种攻击可以称为cookie劫持。

      sessionID除了可以保存在cookie中外,还可以保存在URL中,作为请求的一个参数。但是这种方式的安全性难以经受考验。 在生成sessionID时,需要保证足够的随机性,比如采用足够强的伪随机数生成算法。现在的网站开发中,都有很多成熟的开发框架可以使用。

    四、谈谈session  fixation攻击

      举例:

        认证前的url是  :  http://bbs.xxxx.com/wap/index.php?action=forum&fid=72&sid=2iu2pf

      其中,sid是用户认证的sessionID。用户登录后,这个sid没有发生改变,因此黑客可以先构造好此URL,并诱使其他用户打开,当用户登录成功后,黑客也可以直接通过此URL进入用户账号。

      解决session fixation的办法是: 在登录完成后,重写sessionID。

    五、谈谈session 保持攻击

      一般来说,session是有生命周期的,当用户长时间为活动后,或者用户点击退出后,服务器将销毁session。如果session一直不销毁的话,攻击者就能通过此有效的session一直使用用户的账号,成为一个永久的“后门”。攻击者可以通过不停地发起访问请求,让session一直活下去。(登录进用户的账号,不停地刷新页面)

      如何对抗session保持攻击呢?

      (1)在一定时间后,强制销毁session

      (2)当用户客户端发生变化时(比如用户的IP、useagent等),要求用户重新登录。

      (3)同一个用户可以同时拥有几个有效的session。

    六、单点登录(sso)

      它希望用户只需要登录一次,就可以访问所有的系统。从安全的角度来看,sso把风险集中在单点上,这样做有利有弊。

      目前互联网上最为开放和流行的单点登录系统是OpenID。OpenID是一个开放的单点登录框架。在用户登录网站时,用户只需要提交他的OpenID(就是用户唯一的URI)以及OpenID的提供者,网站就会将用户重定向到OpenID的提供者进行认证,认证完成后再重定向回网站。

    七、总结

      认证的手段是丰富多彩的。在互联网中,除了密码可以用于认证外,还有很多新的认证方式可供使用。我们也可以组合使用各种认真手段,以双因素认证的方式,提高安全强度。

      在WEB应用中,用户登录之后,服务器端通常会建立一个新的session以跟踪用户的状态。每个session对应一个标识符sessionID,sessionID用来标识用户身份,一般是加密保存在cookie中。有的网站也会将session保存在cookie中,以减轻服务器端维护session的压力。围绕着session可能会产生很多安全问题,这些问题都是设计安全方案时需要考虑到的。

  • 相关阅读:
    基础总结深入:数据类型的分类和判断(数据、内存、变量) 对象 函数 回调函数 IIFE 函数中的this 分号
    BOM 定时器 通过修改元素的类来改变css JSON
    事件 事件的冒泡 事件的委派 事件的绑定 事件的传播
    DOM修改 使用DOM操作CSS
    包装类 Date Math 字符串的相关的方法 正则表达式 DOM DOM查询
    数组 call()、apply()、bind()的使用 this arguments
    autocad 二次开发 最小包围圆算法
    win10 objectarx向导在 vs2015中不起作用的解决办法
    AutoCad 二次开发 jig操作之标注跟随线移动
    AutoCad 二次开发 文字镜像
  • 原文地址:https://www.cnblogs.com/hdsec/p/8486121.html
Copyright © 2011-2022 走看看