一、认证的目的是为了认出用户是谁,受权的目的是为了决定用户可以作什么。php
二、认证明际上就是一个验证凭证的过程。算法
三、若是只有一个凭证被用于认证,则称为“单因素认证”;若是有两个或者多个凭证被用于认证,则称为“双因素认证”或者“多因素认证”。通常来讲,多因素认证的强度要高于单因素认证。数据库
一、密码是最多见的一种认证手段,持有正确密码的人被认为是可信的。“密码强度” 是设计密码认证方案时第一个须要考虑的问题。 浏览器
二、黑客们经常使用的一种暴力破解手段,不是破解密码,而是选择一些弱口令,好比123456,而后去猜解用户名,知道发现一个使用弱口令的帐户为止。因为用户名每每是公开的信息,攻击者能够收集一份用户名的字典,是的这种攻击的成本很是低,而效果却比暴力破解密码要好不少。安全
三、密码的保存也有一些须要注意的地方。通常来讲,密码必须以不可逆的加密算法,或者是单向散列函数,机密后存储在数据库中。将明文密码通过哈希后(好比MD5或者SHA-1)再保存到数据库中,是目前业界比较广泛的作法——在用户注册时就已经将密码哈希后保存在数据库中,登陆时验证密码的过程仅仅是验证用户提交的“密码”哈希值,与保存在数据库中的“密码”哈希值是否一致。目前黑客们普遍使用的一种破解MD5后密码的方法是“彩虹表”。彩虹表的思路是收集尽量多的密码明文和明文对应的md5值。这样只须要查询md5值,就能找到该md5值对应的明文。为了不密码哈希值泄漏后,黑客可以直接经过彩虹表查询出密码明文,在计算密码明文的哈希值时,增长一个“salt”。“salt”是一个字符串,它的做用是为了增长明文的复杂度,并能使得彩虹表一类的攻击失效。服务器
salt的使用以下:cookie
MD5(username+password+salt)session
salt应该保存在服务器端的配置文件中,并妥善保存。框架
当用户登陆完成后,在服务器端就会建立一个新的会话(session),会话中会保存用户的状态和相关信息。服务器端维护全部在线用户的session,此时的认证,只须要知道是哪一个用户在浏览当前的页面便可。为了告诉服务器应该使用哪个session,浏览器须要把当前用户持有的sessionID告诉服务器。常见的作法就是把sessionID加密后保存在cookie中,由于cookie会随着HTTTP请求头发送,且受到浏览器同源策略的保护。函数
session劫持就是一种经过窃取用户sessionID后,使用该sessionID登陆进目标帐户的攻击方法,此时攻击者其实是使用了目标帐户的有效session。若是sessionID是保存在cookie中的,则这种攻击能够称为cookie劫持。
sessionID除了能够保存在cookie中外,还能够保存在URL中,做为请求的一个参数。可是这种方式的安全性难以经受考验。 在生成sessionID时,须要保证足够的随机性,好比采用足够强的伪随机数生成算法。如今的网站开发中,都有不少成熟的开发框架可使用。
举例:
认证前的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保持攻击呢?
(1)在必定时间后,强制销毁session
(2)当用户客户端发生变化时(好比用户的IP、useagent等),要求用户从新登陆。
(3)同一个用户能够同时拥有几个有效的session。
它但愿用户只须要登陆一次,就能够访问全部的系统。从安全的角度来看,sso把风险集中在单点上,这样作有利有弊。
目前互联网上最为开放和流行的单点登陆系统是OpenID。OpenID是一个开放的单点登陆框架。在用户登陆网站时,用户只须要提交他的OpenID(就是用户惟一的URI)以及OpenID的提供者,网站就会将用户重定向到OpenID的提供者进行认证,认证完成后再重定向回网站。
认证的手段是丰富多彩的。在互联网中,除了密码能够用于认证外,还有不少新的认证方式可供使用。咱们也能够组合使用各类认真手段,以双因素认证的方式,提升安全强度。
在WEB应用中,用户登陆以后,服务器端一般会创建一个新的session以跟踪用户的状态。每一个session对应一个标识符sessionID,sessionID用来标识用户身份,通常是加密保存在cookie中。有的网站也会将session保存在cookie中,以减轻服务器端维护session的压力。围绕着session可能会产生不少安全问题,这些问题都是设计安全方案时须要考虑到的。