目录

  • 1、背景介绍
  • 2、安全风险
    • 认证过程攻击
    • 认证后的Session攻击
  • 3、防范手段
    • 一、在用户密码方面
      • 1、校验密码强度(重要)
      • 2、不可逆的加密算法(重要)
      • 3、多因素认证(看业务场景)
      • 4、认证的超频限制(重要)
    • 二、在会话管理方面
      • 1、会话cookie一定要设置HttpOnly(重要)
      • 2、用户客户端发生改变时,强制重新登录 (重要)
      • 3、踢下线功能,每个用户只允许一个session(重要)

如时间有限,可直接阅读防范手段一节。

1、背景介绍

今年开始公司准备对项目做部分重构,其中安全性问题首当其冲,除了已知的问题外,还需要发散思维,尽可能找出更多的潜在问题。期间发现一本非常好的书《白帽子讲Web安全》,感谢吴翰清大佬,读完本书让我对web安全有了更深刻的理解,强烈推荐大家阅读。

我打算记录下整个安全性重构的过程,相关知识点大部分会摘抄自《白帽子讲Web安全》,因为总结的很到位了,最后记录下公司内采用的防范手段(敏感信息不会书写)。

2、安全风险

首先需要知道”认证(authentication)“和”授权(authorization)“的区别:
-> 认证的目的是为了认出用户是谁,授权的目的为了决定用户能做什么
-> 认证实际上就是一个验证凭证的过程,常用凭证如账号密码、指纹等

认证又有”单因素认证“和“多因素认证”:只有一个凭证比如账号密码,称为单因素,同时还具备手机验证码、指纹等称为多因素认证。在用户体验上多因素会带来一些不便,可能会验证两次以上,如需要安装证书、输入短信验证码、输入支付密码等。

账号密码凭证还是目前比较普遍的做法,实现成本低、认证简单,缺点是安全性比较弱,容易被猜测,因为用户可能会输入易猜测的简单密码,因此需要有一套完善的密码方案。

认证过程攻击

这里只谈密码认证的攻击方式。除了暴力破解外,黑客常用的手段就是猜测,维护一份弱密码列表,比如123456,或尝试输入用户相关信息作为密码输入,比如出生日期、姓名拼音等。这种攻击成本很低,而且效果往往会更好。

又或者采用撞库的方式,因为很多网友都习惯使用同一密码。

认证后的Session攻击

通过密码或其他认证因素登录后,用户访问页面会携带一个凭证id,即SessionId。服务器中保存着所有在线用户的Session,客户端只要携带SessionID访问服务器即可被识别出用户身份。目前常见做法是保存在客户端Cookie中,因为Cookie会随着HTTP请求发送,并受浏览器同源策略的保护。

Session劫持
SessionID一旦在生命周期内被窃取,就等同于账户失窃,因为攻击者已不需要攻击登录过程,这种攻击方式称为Session劫持,如果SessionID保存在Cookie中则又称为Cookie劫持。其方式有很多,比如XSS攻击、网络Sniff、本地木马读取。XSS漏洞可以通过将会话Cookie设置为HttpOnly(js不可读),网络Sniff和木马只能在客户端着手解决了。

SessionID暴露
书里提到了曾经QQ的WAP邮箱的漏洞,他们是将会话id保存在URL中,没保存在Cookie中(可能以前很多手机不支持Cookie吧),那么如果故意在发送的邮箱内容中引用一张外部网站图片,借助Referer的机制,在外部网站的服务器访问日志中可以拿到Referer信息,这样sid就暴露了。
注意:有时候会不经意间犯类似这种错误,比如前后端分离后,如果前端将会话token跟在url参数后(比如有页面之间的跳转,需要传递token),就可能会被攻击者利用。一定要慎重,sid的方式我们肯定是废弃的,但也要引起注意是否可能发生同类风险。

Session Fixation攻击 和 Session保持攻击
意思是:如果登录前后的用户SessionID没有变化,则有可能存在Session Fixation问题。
比如攻击者设法将带有SessionID的地址(比如刚才讲的sid问题)发送给用户,并诱导用户打开登录,由于服务器未更新SessionID的值,导致攻击者也可以访问用户账户了。
会话保持:攻击者持有用户Se

3、防范手段

一、在用户密码方面

从用户输入密码,到程序存储密码、再到认证密码的过程中,都要严格遵守以下规范:

1、校验密码强度(重要)

在注册时,增加密码强度检测功能,并以友好的方式告知用户输入密码的强度:

一般项目都有自己的密码强度校验规则,OWASP推荐了一些策略方案:
密码长度上:

  • 普通应用6位以上
  • 重要应用8位以上,并考虑双因素认证

密码复杂度上:

  • 密码区分大小写字母
  • 密码为大写字母、小写字母、数字、特殊符号中两种以上的组合
  • 不要有连续性的字符,比如1234abcd等,很容易被猜测到
  • 尽量避免出现重复的字符,比如888888

除了OWASP推荐的策略外,还要注意不能使用用户公开数据作为密码或密码的部分组成,比如姓名拼音、手机号、生日等,这些信息往往都是公开的,很容易被猜测。
推荐公司根据业务场景制定自己的密码强度规范,并维护一份弱密码列表,只要是不合法要求的密码,都提示用户此密码不安全或强制让其修改。

2、不可逆的加密算法(重要)

在密码入库的时候一定不要直接保存明文密码,必须采用不可逆的加密算法(常见的加密算法有MD5或SHA-1),将加密后的密码保存到数据库中。这样内部人员也看不到用户密码,而且就算被黑客攻击也看不到。

在用户登录认证的时候,仅对用户输入的密码进行同样规则加密,再与库内保存的“密码”进行匹配是否一致即可。

防止命中彩虹表:
彩虹表:收集足够多的密码明文与密文的对应表,比如网站:www.cmd5.com
在不可逆加密算法的基础上,还要为用户设置的密码添加额外随机字符串(称为Salt)来增强复杂度,MD5(password+salt),这样可以使彩虹表攻击方式失效。Salt可以保存到服务器配置文件中或用户信息表中这样每个用户都随机生成不同的。

3、多因素认证(看业务场景)

在重要的场景下,比如支付扣款、修改重要资料时,可让其输入支付密码(非登录密码)或短信验证码来验证是否本人操作。
多因素认证能够提高攻击的门槛,攻击者必须通过所有的认证机制,比如能够成功支付的前提是,必须知道用户的登录密码和支付密码。

4、认证的超频限制(重要)

比如密码输入错误超过一定次数就冻结账号一段时间。当然了这个功能有可能会被恶意利用冻结别人账号。建议还是添加行为验证码,常见的有拖拽、点选、拼图等花样,在用户输入错误密码超过几次后强制进行验证码验证,这样也不会影响正常用户的体验。

还有其他方式,但可能会影响用户的体验。

  • 定期提醒用户修改密码,防止被撞库
  • 输入用户名,手动点击下一步才能输入密码(参考apple网站登录)
  • 增加验证码复杂度,比如12306那种,人类识别起来都费劲

二、在会话管理方面

1、会话cookie一定要设置HttpOnly(重要)

设置为httponly的Cookie,JS读取不到,可以防止由XXS引起的Cookie劫持。

2、用户客户端发生改变时,强制重新登录 (重要)

在用户登录时,将IP、User-Agent或其他标识信息也保存起来,每次请求校验这些信息与之前保存的是否一致,如果发生改变强制下线。

3、踢下线功能,每个用户只允许一个session(重要)

即只允许用户在一个客户端在线,且只允许生成一个SessionID或Token(前后端分离后的叫法)

还有其他方式:

  • 登录后,重写SessionId(即颁发新的SessionID给客户端,不是session)
  • 我们还可以整合第三方登录功能,比如微信的网页扫码授权,让网站具备了多因素认证
  • 如果场景允许的话,可以优先让用户通过短信验证码登录

单点登录
如果公司是多个团队协作开发,建议开发单点登录系统,将用户安全保障集中起来由专门团队维护。

暂时就写到这里,如有变化,会及时更新的。如有错误,请大家及时提出。
再次感谢吴翰清大佬!

公司项目重构-Web安全-认证和会话管理相关推荐

  1. 白帽子讲web安全——认证与会话管理

    在看白帽子讲web安全,刚好看到认证与会话管理:也就是我们在平常渗透测试中遇到最多的登录页面,也即是用户名和密码认证方式,这是最常见的认证方式. 了解两个概念:认证和授权 1):认证的目的是为了认出用 ...

  2. 公司项目重构-Web安全-文件上传漏洞

    目录 1.背景介绍 2.攻击原理 3.防范手段 1).做好文件类型检查(重要) 2).最好对图片进行压缩或resize 3).使用随机数改写文件名和文件路径(根据公司需求) 4).设置单独文件服务器和 ...

  3. 10大最重要的Web安全风险之三----A3,错误的认证和会话管理

    2019独角兽企业重金招聘Python工程师标准>>> OWASP TOP10 A1-注入 A2-跨站脚本(XSS) A3-错误的认证和会话管理 A4-不正确的直接对象引用 A5-伪 ...

  4. 【网络安全】——服务端安全(注入攻击、认证与会话管理和访问控制、访问控制、加密算法与随机数、Web框架安全、应用层拒绝服务攻击DDOS)

    这一篇博客记录的是服务端安全应用安全的知识,学习内容来自<白帽子讲Web安全>. ​ 承接自上一篇客户端安全之后,包括注入攻击.认证与会话管理和访问控制.访问控制.加密算法与随机数.Web ...

  5. 《白帽子讲WEB安全》学习笔记之第9章 认证与会话管理

    第9章 认证与会话管理 9.1 who am i? 认证包含了身份和身份认证两层含义. q  身份-我是谁? q  身份认证-这就是我. 认证的目的就是为了认出用户是谁?而授权的目的是为了决定用户能够 ...

  6. 白帽子讲web安全 | 第9章 认证与会话管理

  7. Session会话管理

    会话管理 Web会话管理概述 常见的Web应用会话管理方式 基于Server端的Session的管理方式 基于Cookie的Session的管理方式 Cookie与Session最大的区别 Cooki ...

  8. php 登录安全认证,介绍几种常用的web安全认证方式

    本文为大家介绍了五种常用的web安全认证方式,具有一定的参考价值,希望能对大家有所帮助. 1.Http Basic Auth 这是一种最古老的安全认证方式,这种方式就是简单的访问API的时候,带上访问 ...

  9. 【Java从0到架构师】项目实战 - 会话管理、EhCache、JWT、权限管理 Shiro、打包部署

    项目实战 - 权限管理 会话管理 客户端身份认证 - 基于 Cookie.Session 客户端身份验证 - 基于 token EhCache - 简单的缓存框架 JWT - 基于 JSON 的 to ...

最新文章

  1. Android之NDK开发的简单实例
  2. Android app项目开发步骤总结
  3. yum源 php7.2,云服务器:CentOS7 yum安装PHP7.2的操作方法
  4. 人的大脑皮层对产品设计有何启发?
  5. 要学好 C 语言 / C++ ,Makefile 可少不了
  6. 对JavaScript内置对象arguments的一些见解
  7. Sparklens:Spark应用程序优化工具
  8. javascript手册安卓版_JavaScript 完全手册(2018版)
  9. halcon学习笔记——(6)单摄像机标定
  10. 仍然提供32位Linux发行版,Ubuntu 20.04彻底淘汰32位映像,只提供64位映像下载
  11. codeforces Roud499Div2 B和C
  12. 小程序常用api总结
  13. 海康威视硬盘录像机怎么连接萤石云
  14. PDF文件如何删除空白页?告诉你两种好方法
  15. OMNeT 例程 Tictoc15 和 Tictoc16 矢量和标量统计详解
  16. CodeForces-721A-One-dimensional Japanese Crossword
  17. 【CSS】span标签设置宽度
  18. 倪光南:解读中国ISV生存现状
  19. 在计算机英语中input的意思,input是什么意思
  20. linux怎么找回普通用户密码,Ubuntu Linux系统密码找回

热门文章

  1. LINUX uptime命令解读
  2. ip (internet protocol)
  3. 微信小程序识别图片并提取文字_这款微信小程序可以批量图片转文字?识别准确率超高!...
  4. 线性插值(双线性)(三线性)
  5. 使用WebStorm的Macros宏指令,实现保存的同时格式化代码,并跳至行尾
  6. 【循环自相关和循环谱系列6】信号的循环平稳性(循环自相关函数)基本原理及推导
  7. KONG和KONGA部署及配置
  8. 用python计算残差等
  9. 关机的代码和电脑骚操作
  10. 如何查找sci期刊的历年影响因子