一、认证与会话管理

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

  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. 错误提示控件errorProvider

    http://www.cnblogs.com/suguoqiang/archive/2012/07/17/2596564.html 错误提示控件errorProvider VS显示: 核心代码: th ...

  2. 【推荐系统】知乎live入门5.常用技能与日常工作

    参考链接 [推荐系统]知乎live入门 目录 1. 实习与求职 2. 推荐算法职责 3. 解构算法 4. 参考资料 5. 其他强关联岗位 6. 工作模型和日常工作 7. 2017年相关论文 8. 找工 ...

  3. React框架新闻网站学习过程中遇到的错误总结

    1.安装指定版本插件命令 npm install 插件名字@1.1.4(版本号) --save 或 yarn add 插件名字@1.1.4(版本号) --dev 2.Error:‘Link’ is n ...

  4. Python基础入门一文通 | Python2 与Python3及VSCode下载和安装、PyCharm激活与安装、Python在线IDE、Python视频教程

    目录 1. 关键词 2. 推荐阅读 2.1. 视频教程 3. 本文按 4. 安装 4.1. 视频教程 4.2. 资源下载 4.3. 安装教程 1. 关键词 Python2 与Python3及VSCod ...

  5. Katalon Recorder初探

    缘由 最近工作中,有大量web页面上的重复操作,实在麻烦,就想利用selenium ide录制出一些操作集合,以便复用.新版本的selenium ide 3目前只支持firefox最新的版本,而且代码 ...

  6. centos下通过conda安装pytorch

    一.安装anaconda anaconda安装简单,只要确定自己的系统即可,具体安装请参考这里 二.确定自己的系统版本 我的是centos cat /etc/redhat-release 查看linu ...

  7. nodejs 文件读写

    文件读取: //例如: fs.readFile 就是用来读取文件的 //1. 使用require方法来加载 fs 核心模块 var fs = require('fs'); /* *2. 读取文件 * ...

  8. HDU-6038 Function 思维+循环节

    解法:这道题很有意思,值得一做和细细思考. 首先是我们要观察这个映射公式,他的实质是什么?其实就是b到a的循环映射,这是因为a数列和b数列都是0-n-1的排列,意味着每个数都是唯一的,那么ab的这个循 ...

  9. CF3D Least Cost Bracket Sequence(2500的实力贪心...

    哎,昨天一直在赶课设..没有写 最近听了一些人的建议,停止高级算法的学习,开始刷cf. 目前打算就是白天懒得背电脑的话,系统刷一遍蓝书紫书白书之类的(一直没系统刷过),回宿舍再上机吧. https:/ ...

  10. [CSS]CSS中使用span和div遇到的问题

    一. span和div的区别 1.span是行级元素,div是块级元素2.span占用的宽度是内容的宽度,而div默认是一行.所以一般在页面中,只有一行或不到一行文字用span,元素占据多行时用div ...