1、认证

1.1、       认证和密码管理安全规则

1

认证控制必须只能在服务器端执行。

2

除了指定为公开的资源,对所有其它资源的访问都必须先经过认证。

3

为所有关键凭证实施防“暴力破解”策略(参考暴力破解)。

4

当业务系统需要连接到第三方系统并存取敏感信息时,必须要求进行认证,认证的凭证不允许硬编码到代码中。

5

只使用HTTP POST请求来发送认证凭证,并且服务器只接受POST请求。

6

口令必须通过加密通道来传输。注:所有敏感数据都要满足此规则。

7

执行口令长度和复杂度检查【1.3、参见口令复杂度策略】。

8

不允许在密码输入框中显示明文密码。

9

为所有password类型的form或input标签加入AUTOCOMPLETE="off"属性,该属性用于告诉浏览器不记住当前输入的口令。

10

【可选建议】记录用户上一次成功登录的信息并在下一次登录时给予显示。

11

【可选建议】使用多因素认证,比如数字证书、短信验证码、动态口令等。

12

【可选建议】进行关键操作时要求用户重新认证(比如输入短信验证码或口令等)。

13

【可选建议】从访问站点的首页开始直到用户登录页(即输入用户名密码的页面)都使用https,避免从起始的http状态切换到https状态(最好是全站https)。

 

1.2、       修改密码功能

简要描述

当用户密码泄漏或者有时候用户自己想要去修改密码,此时需要系统提供“修改密码”的功能。

解决方案

修改新密码需要旧密码,并且需要重新确认一次新密码;

其它请参考认证和密码管理安全规则1、3、5、6、7、8和9

备注

 

1.3、       口令复杂度策略

简要描述

弱口令很容易被暴力破解,口令越弱,被暴力破解的成功率就越高。

解决方案

设置密码最小密码长度(建议6个字符)和最大长度(建议128个字符);

设置密码复杂度要求(建议数字、大小字母和特殊字符4选2);

【可选建议】对用户使用过的历史密码进行hash并存储,设置的新密码时,使用新密码的hash和历史密码的hash做对比,保证用户不能在过短时间内设置两次相同密码;

正常情况下,不允许用户修改或关闭密码复杂度验证,特殊情况下,可允许只对用户提出安全提示或允许用户进行关闭;

备注

 

1.4、       口令的存储策略

简要描述

密码是具有保密性的,不应当存在密码被还原成明文的情况。管理员或服务人员可以在不需要旧密码的情况下为用户重置新密码,因此,不存在需要还原明文的理由,常用的机制是使用哈希算法来存储密码,但是现今有些算法已经证明是不安全的,所以应当确保使用时选择足够安全的算法。

解决方案

1.4.1、对于不需要还原口令明文的场景(以下二选一):

使用sha256对口令进行hash后再存储;

如果使用MD5,则应为每个用户口令添加独立的salt值(比如userid)并hash后再存储(参考附录11.9.3);

1.4.2、对于需要还原口令明文的场景:

使用AES128或以上的强安全算法对口令进行加密后再存储(参考附录11.9.1),并安全地保护密钥(参考 加密解密à密钥的保存);

1.4.3、如果没有特殊需求,不要将口令密文或哈希值以任何形式返回给用户。

备注

除了口令之外,对于所有被识别出来的业务敏感数据在存储时应满足解决方案中的要求。

1.5、       重置密码/找回密码/忘记密码

简要描述

为重置密码/找回密码/忘记密码等重要模块提供安全开发建议。

解决方案

当使用回答问题的方式找回密码时,应保证所提供的问题的答案是难以猜测的也是难以通过公共资源获取的,同时建议需要用户正确回答两个或两个以上的问题,比如,我最喜欢的一句话,我最想去的地方等等。

如果通过Email的方式重置密码,则应将重置密码用的临时URL发送到用户的注册的Email,并为其设置合理的有效期;

确保重置密码的临时URL是不可猜测和破解的;

如果使用手机验证码的方式重置密码,应保障手机验证码安全(参考手机验证码章节);

其它请参考证和认证和密码管理安全规则规则1、3、5、6、7、8和9。

备注

 

1.6、       暴力破解

简要描述

应用程序必须要有足够的手段来抵御暴力破解和字典攻击。

解决方案

对暴力攻击行实施图形验证码或账户锁定策略,如果选择锁定策略,不可对账户进行永久锁定以避免造成拒绝服务攻击;

当认证失败时,不要告诉用户登录失败的具体原因,比如用户名不存在,密码不正确等,可只列举所有可能失败的原因;

【可选建议】在日志里记录用户每一次登录的信息,最起码要记录用户登录失败的信息;

【可选建议】尝试阻止同一个IP多次失败地去登录不同的账户;

【可选建议】如果用户已登录,进行多次关键操作失败后强制注销session(比如修改密码和校验短信验证码等等);

备注

 

1.7、       自动登录功能

简要描述

该功能可以让用户返回原先访问的站点而不需要重新认证,对于在公共网络的用户来说是相当危险的。

解决方案

对于安全性要求较高的应用场景,不应当提供自动登录的功能,如果必须提供,应提示用户可能会存在的风险;

为持久性cookie设置合理的期限(建议不超过3天)。

备注

 

1.8、       手机验证码

简要描述

对于对安全性有一定要求的场合,手机验证码提供了更加安全的保障,用户只有输入系统发送的短信验证码方可进一步操作。

解决方案

设置适当的手机验证码长度(至少4位纯数字);

为需要验证手机验证码的请求设置防暴力破解机制(比如 多次尝试账户锁定和验证码失效等);

限制单个账户调用短信网关接口的频度(建议1分钟1次)。

为手机验证码设置合适的自动失效期(建议0.5-1个小时);

手机验证码使用后应立即失效。

备注

 

1.9、       图形验证码

简要描述

图形验证码可以用来防御多种非人为操作的自动化攻击。

解决方案

保证在判断验证码之后再对请求做进一步处理;

使用强随机性函数产生验证码;

为验证码图片背景添加噪声;

图形验证码的形体尽量随机变化;

图形验证码在使用一次后立马失效。

未使用的图形验证码必须具有时效性。

备注

 

web安全开发指南--认证的更多相关文章

  1. axis1,xfire,jUnit 测试案列+开Web Service开发指南+axis1.jar下载 代码

    axis1,xfire,jUnit 测试案列+Web Service开发指南(中).pdf+axis1.jar下载    代码 项目和资源文档+jar 下载:http://download.csdn. ...

  2. 【web开发 | 移动APP开发】 Web 移动开发指南(2017.01.05更新)

    版本记录 - 版本1.0 创建文章(2016.12.30) - 版本1.1 更正了hybird相关知识:增加了参考文章(2017.01.05): + Web APP更正为响应式移动站点与页面,简称响应 ...

  3. Web安全开发指南--文件系统

    6.1.上传文件功能 简要描述 文件上传漏洞是由于文件上传功能实现代码没有对用户上传的文件进行正确处理,导致允许攻击者向服务某个目录上传文件. 解决方案 上传文件功能只对登录用户开放: 同时通过文件头 ...

  4. Web安全开发指南--会话管理

    1.会话管理 3.1.会话管理安全规则 1 避免在URL携带session id. 2 使用SSL加密通道来传输cookie. 3 避免在错误信息和调试日志中记录session id. 4 使用框架自 ...

  5. Web安全测试指南--认证

    认证: 5.1.1.敏感数据传输: 编号 Web_Authen_01_01 用例名称 敏感数据传输保密性测试 用例描述 测试敏感数据是否通过加密通道进行传输以防止信息泄漏. 严重级别 高 前置条件 1 ...

  6. Web安全开发指南--异常错误处理与日志审计

    1.异常错误处理与日志审计 5.1.日志审计系统安全规则 1 日志系统能够记录特定事件的执行结果(比如 成功或失败). 确保日志系统包含如下重要日志信息: 1.  日志发生的时间: 2.  事件的严重 ...

  7. web安全开发指南--权限管理

    2.1               访问控制安全规则 1 访问控制必须只能在服务器端执行. 2 只通过session来判定用户的真实身份,避免使用其它数据域的参数(比如来自cookie.hidden域 ...

  8. Lightning Web Components 开发指南(二)

    Lightning Web Components 是自定义元素使用html 以及现代javascript进行构建. Lightning Web Components UI 框架使用web compon ...

  9. Web安全开发指南--数据验证

    1.数据验证 4.1.输入数据验证安全规则 1 数据验证必须放在服务器端进行. 2 至少对输入数据的数据类型.数据范围和数据长度进行验证. 3 所有来自不可信数据源(比如网络.用户命令.数据库和文件系 ...

随机推荐

  1. FineReport——插入行策略

    1.空值是默认的选项,即每次插入新行时,格子都是空白的. 2.原值即单元格中原有内容是什么,就复制到新增的格子中,一般适用于单元格是使用公式定义的, 在插入单元格时,公式会保留下来. 3.默认值即通过 ...

  2. [ Python ] 文件的读写操作

    1. 文件读写操作 读写文件是最常见的 IO 操作, Python 内置了读写文件的函数.在磁盘上读写文件的功能是由操作系统提供的,所以读写文件是请求操作系统打开一个文件对象(通常称为文件描述符),然 ...

  3. POJ 1160 Post Office(DP+经典预处理)

    题目链接:http://poj.org/problem?id=1160 题目大意:在v个村庄中建立p个邮局,求所有村庄到它最近的邮局的距离和,村庄在一条直线上,邮局建在村庄上. 解题思路:设dp[i] ...

  4. 智能社官网顶部导航实现demo

    从智能社的blue老师公开课中学习到了很多,在此表示感谢. 这个导航很好玩,于是就想实现一个. html <div id="box"> <ul> <l ...

  5. 使用php后台给自己做一个页面路由,配合ajax实现局部刷新。

    今天就要放假了,把近来囤积的小玩意儿总结整理一下. 在请求一个html页面来嵌入到当前页会有一个问题,就是跟随请求过来的html他的样式表和脚本会失效.是因为文档加载的先后顺序等问题造成的.因此,加载 ...

  6. CentOS7.5字体美化

    背景知识 有衬线 (Serif) 无衬线 (Sans Serif) 和等宽 (Monospace) 字型 1 有衬线 (Serif) 字型是比较正式的字体,比划粗细不一,在笔划的边缘有装饰部分(我的理 ...

  7. LoadRunner 执行单句SQL语句

    LoadRunner 执行单句SQL语句 Action() { int NumRows=0; int i=1; //建立数据库连接 lr_db_connect("StepName=Datab ...

  8. mongo connect BI 连接至Power BI

    第一步:安装mongodb服务 官网地址:https://www.mongodb.com/download-center?jmp=nav#community mongodb的安装请参考:http:// ...

  9. Windows 10 安装 Mongodb

    因为新换了Windows 10 电脑,需要在新电脑重新安装所有的软件,包括mongodb 下载文件:首先在mongodb的官方网站上下载最新版本的mongodb安装程序,https://www.mon ...

  10. bootstrap 在django中的使用

       一.应用 http://www.bootcss.com/进入bootstrap4或bootstrap3中文网,想要快速地将 Bootstrap 应用到你的项目中,有以下两种办法:  1.boot ...