一、认证与会话管理

  认证:简而言之就是通过一定的凭证认出用户是谁。认证过程中按凭证数量可简单分为 ‘单因素认证’、‘双因素认证’或多因素认证。一般来说,多因素认证强度更高,但是用户体验上会比单因素认证麻烦些。

  1、单因素认证(密码认证)

  密码是最常见的认证手段,持有正确密码的人被认为是可信的。其优势在于使用成本低,认证过程实现起来简单,但属于一种比较弱的安全方案,可能被猜出。因此密码的设定需要一定的策略。

  目前还没有标准的密码策略,可以看看OWASP(开放式Web应用程序安全项目)推荐的一些最佳实践做一些密码策略的总结:

  密码长度:

    普通密码要求长度为6位以上;

    重要的密码要求长度为8位以上;

  密码复杂度:

    密码区分大小写;

    密码为大写字母、小写字母,字数,特殊符号中两张以上的组合;

    不要有连续的数字 如:1234546abcd

    尽量避免出现重复的字符

  除此之外还要注意不要使用用户公开的数据或与隐私相关的数据作为密码。

  密码保存

  密码要以不可逆的加密算法,或单向散列函数算法,加密后存储在数据库中。

  目前黑客广泛使用的破解MD5后密码的方法是 ’彩虹表‘。彩虹表思路是尽可能多的手机多的密码明文和明文对应的MD5值,这样只需要查询MD5值就可能找到MD5值对应的明文。为了避免密码哈希值泄露后,黑客能够通过彩虹表查询出密码明文,在计算密码明文的哈希值时,增加一个“Salt”。可以增加明文的复杂度,使彩虹表这一类的攻击失效如: MD5(username + password + salt) 其中 salt 为随机字符串,需要保到服务器相关位置,妥善保管。

  2、多因素认证

    很多重要的系统,如网上银行和网上支付平台在用单一的密码认证明显是不够的,一般都需要采用双因素或多因素认证。如支付宝提供的认证手段:除了支付密码外,手机动态口令、数字证书、宝令、支付盾、第三方证书等都可以用于用户认证。这些不同认证手段可以相互结合,使得证书的过程更安全。

    多因素认证提高了攻击的门槛,比如 一个支付交易使用了密码和数字证书认证双因素认证,攻击者除了盗取到密码外还必须想办法在用户电脑上完成支付,这样大大提高了攻击的成本。

  3、session与认证

    密码证书等认证手段,一般都是用于登录过程的。当完成登录后,用户访问网站的页面不可能每次都去使用登录认证手段进行认证,因此当用户认证后就需要替换一个对用户透明的凭证。这个凭证就是SessionID。

    当用户登录完成后,在服务器端就会创建一个新的会话(Session),会话中保存用户的信息和状态。服务器端维护所有在线用户的Session,此时的认证,只需要知道是哪个用户在浏览当前页面即可。为了告诉服务器应该使用哪个session 浏览器需要把当前用户持有的SessionID告知服务器。

    最常见的做法就是把SessionID加密后保存在Cookie中,因为Cookie会随着HTTP请求头发送,且受到浏览器同源策略的保护。

    SessionID一旦在生命周期中被窃取,就等同于账户失窃。

    Session劫持就是一种通过窃取用户SessionID后,使用该SessionID登录进目标账户的攻击方法。此时攻击者实际上是使用了目标账户的有效Session。

    如果SessionID是保存在Cookie中的,则这种攻击可以称为Cookie劫持。

    SessionID除了可以保存在Cookie中外,还可以保存在URL中,作为请求的一个参数。 但是这种方式的安全性难以经受考验。

    在生成SessionID时,需要保证足够的随机性,比如采用足够强的伪随机数生成算法。

    Session Fixation攻击

    卖车,不换锁的例子。

    这个没有换“锁”而导致的安全问题,就是Session Fixation问题。

    在用户登录网站的过程中,如果登录前后用户的SessionID没有发生变化,则会存在Session Fixation问题。

    解决Session Fixation的正确做法:在登录完成后,重写SessionID

  

    Session保持攻击

    Session如果一直未能失效,会导致什么问题呢?

      a 如果攻击者能一直持有一个有效的Session,而服务器对于活动的Session也一直不销毁的话,攻击者就能通过此有效Session,一直使用用户的账户,成为一个永久的“后门”

    攻击者如何永久地持有一个Session?

      a 攻击者可以通过不停地发起访问请求,让Session一直“活”下去。

      b Cookie是可以完全由客户端控制的,通过发送带有自定义Cookie头地HTTP包。

      c 有一种做法是服务器端不维护Session,而把Session放在Cookie中加密保存。

         Cookie的Expire时间是完全可以由客户端控制的。

          ① 篡改这个时间,并使之永久有效,就有可能获得一个永久有效的Session,而服务器端完全无法察觉。

          ② 攻击者甚至可以为Session Cookie增加一个Expire时间,使之持久化地保存在本地,变成一个第三方Cookie。

    如何对抗这种Session保持攻击?

      a 在一定时间后,强制销毁Session

      b 当用户客户端发生变化时,要求用户重新登录。 如IP、UserAgent等信息。

      c 每个用户只允许拥有一个Session。

  4、单点登录(Single Sign On,SSO)

    单点登陆,希望用户只需要登录一次,就可以访问所有的系统

    SSO的优点:在于风险集中化,就只需要保护好这一点。

    SSO的缺点:因为风险集中了,所以单点一旦被攻破的话,后果会非常严重,影响的范围将涉及所有使用单点登录的系统。降低这种风险的办法:在一些敏感的系统里,再单独实现一些额外的认证机制。

    目前最为开放和流行的单点登录系统时OpenID。

      OpenID模式仍然存在一些问题

      OpenID的提供者服务水平也有高有低

二、访问控制

  访问控制也可以说是权限控制,是某个主体对某个客体需要实施某种操作,而系统对这种操作的限制就是权限控制。

  在一个安全系统中,确定主题的身份是 ’认证‘ 解决的问题;而客体是一种资源,是主体发起请求的对象。在主体对客体的操作过程中,系统控制主体不能 无限制 的对客体进行操作,这个过程就是 访问控制。

  1、垂直权限管理

    垂直权限管理实际就是 基于角色的权限管理(RBAC模型)。

    不同角色的权限有高低之分。高权限角色访问低权限角色的资源往往是被允许的,而低权限角色访问高权限角色资源通常是被禁止的。若一个本属于低权限的用户通过一些方法能够获得高权限角色的能力,则发生了“越权访问”。在配置权限时,应当使用“最小权限原则”,并使用“默认拒绝”的策略,只对有需要的主体单独配置“允许“的策略。这在很多时候能够避免发生”越权访问“。

  2、水平权限管理

    水平权限管理可以看成 基于数据的访问控制

    相对于垂直权限管理来说,水平权限问题处在同意角色上,系统只验证了能访问数据的角色,既没有对角色内的用户进行细分,也没有对数据的子集做细分,因此缺乏一个用户到数据的对应关系。

  3、OAuth

    OAuth 是在不提供用户名和密码的情况下,授权第三方应用访问web资源的安全协议。可实现不同网站之间的互通。

    常见应用OAuth的场景,一般是某个网站想要获取一个用户在第三方网站中的某些资源或服务。

    OAuth 目前已到了OAuth2,具体原、流程、应用可具体学习。

WEB服务端安全---认证会话与访问控制的更多相关文章

  1. 关于如何提高Web服务端并发效率的异步编程技术

    最近我研究技术的一个重点是java的多线程开发,在我早期学习java的时候,很多书上把java的多线程开发标榜为简单易用,这个简单易用是以C语言作为参照的,不过我也没有使用过C语言开发过多线程,我只知 ...

  2. winform客户端利用webClient实现与Web服务端的数据传输

    由于项目需要,最近研究了下WebClient的数据传输.关于WebClient介绍网上有很多详细介绍,大概就是利用WebClient可以实现对Internet资源的访问.无外乎客户端发送请求,服务端处 ...

  3. 如何提高Web服务端并发效率的异步编程技术

    作为一名web工程师都希望自己做的web应用能被越来越多的人使用,如果我们所做的web应用随着用户的增多而宕机了,那么越来越多的人就会变得越来越少了,为了让我们的web应用能有更多人使用,我们就得提升 ...

  4. Web服务端性能提升实践

    随着互联网的不断发展,日常生活中越来越多的需求通过网络来实现,从衣食住行到金融教育,从口袋到身份,人们无时无刻不依赖着网络,而且越来越多的人通过网络来完成自己的需求. 作为直接面对来自客户请求的Web ...

  5. Delphi XE5通过WebService开发Web服务端和手机客户端

    Delphi XE5通过WebService开发Web服务端和手机客户端介绍 我们开发一个三层的android程序 建立一个webservices  stand-alone vcl applicati ...

  6. wsgiref手写一个web服务端

    ''' 通过wsgiref写一个web服务端先讲讲wsgiref吧,基于网络通信其根本就是基于socket,所以wsgiref同样也是通过对socket进行封装,避免写过多的代码,将一系列的操作封装成 ...

  7. web服务端的架构演变

    此文已由作者肖凡授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 最近Lofter项目碰到很多性能上的问题,特别是数据库相关的,每次推送后,告警就会第一时间到来.这些问题随着产 ...

  8. Rsync同步部署web服务端配置

    Rsync同步部署web服务端配置 1,参数详解: -v, --verbose 详细模式输出. -q, --quiet 精简输出模式. -c, --checksum 打开校验开关,强制对文件传输进行校 ...

  9. Web服务端软件的服务品质概要

    软件品质概述 提供同样功能.产品和服务的服务者中, 竞争力来自功能的多样化和服务品质的差异化, 无论是个体.企业还是国家. 这里的服务指功能.产品的实现程度和处理能力,以及研发/客服提供的技术支持程度 ...

随机推荐

  1. Java-集合第二篇Set集合

    1.Set集合与Collection基本相同,没有提供额外的方法.实际上Set就是Collection,只是行为略有所不同(Set不允许有重复元素). Set下的HashSet.TreeSet.Enu ...

  2. JS补充笔记

    <script> 函数: 普通函数: function func(){ } 匿名函数: setInterval("func()",5000); setInterval( ...

  3. win32 socket编程(二)——TCP/IP

    一.大端.小端法定义 1.1小端法(Little-Endian)就是低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端. (主机字节顺序) 1.2 大端法(Big-Endian ...

  4. Azkaban 2.5.0的详细安装过程

    准备下载Azkaban2.5.0:https://azkaban.github.io/downloads.htm 准备插件: 一.MySQL安装与配置 启动数据库并查看状态:sudo service ...

  5. Debug to add expression

    Debug expression

  6. thinkphp 模板

    一. 模板函数  教程https://www.kancloud.cn/manual/thinkphp5/125005 我们往往需要对模板输出变量使用函数,可以使用: {$data.name|md5} ...

  7. Python---基础-小游戏用户猜数字

    一.10 < cost < 50 的等价表达式 cost = 40 10 < cost < 50 (10 < cost) and (cost < 50) 二.使用i ...

  8. Java+Maven的工程运行Sonar的方式

    step 1:在maven->setting.xml中进行配置 修改mvn工程所用的setting.xml文件,在<profiles></profiles>节点中增加: ...

  9. Redis之数据类型

    一.概念: Redis:一个开源.支持网络.基于内存.键值对存储数据库. 特点:它可以支持多种数据类型. 二.数据类型 1)Redis String 具体说明: 一般的普通的k到v一个映射是Strin ...

  10. ht-1 jdk calendar类

    package calendardemo; import java.util.Calendar; public class CalendarDemo { /** * @param args */ pu ...