首先从英文单词上看,认证为Authentication,而授权是Authorization。
同时两者在概念上有着明显差别。
认证是为了认出你是谁,而授权是确定你能干什么。
认证是建立在密码的基础上的,用户名、密码正确则认证通过,但一般的登陆操作,考虑到用户体验,当用户登陆成功后,不可能让用户每次请求该页面的其它资源时都重新认证一遍。因此,会新产生一个凭证来代表该登陆成功的用户,这个就是sessionID。只要用户的请求中含有这个sessionID,就能证明是该用户。可一旦泄露,就over了。如下有两种劫持方式:
Session劫持——攻击者盗取sessionID,用sessionID登陆目标账户攻击,实际上使用了目标账户在服务器端的有效session。故称为session劫持。
Cookie劫持——当sessionId是加密存放在cookie中的时,上面的劫持就被称为cookie劫持。(最常见的就是XSS攻击)
授权,是安全设计中的核心问题。权限分配不当,很可能让黑客,一步步渗透进去,最后拿到webshell,直接控制服务器,想干啥就干啥。
因此,设计时因遵循如下两个设计原则。
1。垂直权限管理,基于角色的权限管理RBAC(role-based access control)。
首先先定义出不同的角色,不同角色拥有不同的权限。然后,用户会被分到不同的角色中去,行使不同的权限。一个用户可以拥有不同的角色。比如linux下,你可以先guest的角色进入系统,也可以通过sudo,输入正确的密码,直接切到root角色下。
2。水平权限管,基于数据的权限管理。
同一角色下的不同用户,可以看到共享的内容。比如说,同为买家的A和B都可以看到淘宝上卖的是哪些商品,而看不到管理员角色所能看到的后台。但是,A和B虽所处同一级别的角色,但是A肯定是不被允许来查看B的个人资料(如电话,住址)。这就是水平权限管理。同一角色下,有公共的权限,也有独立的权限。一般来说,可以通过分用户组来管理。
以上是关于《白帽子讲web安全》第9,10章的一些个人比较重要的关键点,具体详细内容还是请参考原文吧。