web安全开发指南--认证
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安全开发指南--认证的更多相关文章
- axis1,xfire,jUnit 测试案列+开Web Service开发指南+axis1.jar下载 代码
axis1,xfire,jUnit 测试案列+Web Service开发指南(中).pdf+axis1.jar下载 代码 项目和资源文档+jar 下载:http://download.csdn. ...
- 【web开发 | 移动APP开发】 Web 移动开发指南(2017.01.05更新)
版本记录 - 版本1.0 创建文章(2016.12.30) - 版本1.1 更正了hybird相关知识:增加了参考文章(2017.01.05): + Web APP更正为响应式移动站点与页面,简称响应 ...
- Web安全开发指南--文件系统
6.1.上传文件功能 简要描述 文件上传漏洞是由于文件上传功能实现代码没有对用户上传的文件进行正确处理,导致允许攻击者向服务某个目录上传文件. 解决方案 上传文件功能只对登录用户开放: 同时通过文件头 ...
- Web安全开发指南--会话管理
1.会话管理 3.1.会话管理安全规则 1 避免在URL携带session id. 2 使用SSL加密通道来传输cookie. 3 避免在错误信息和调试日志中记录session id. 4 使用框架自 ...
- Web安全测试指南--认证
认证: 5.1.1.敏感数据传输: 编号 Web_Authen_01_01 用例名称 敏感数据传输保密性测试 用例描述 测试敏感数据是否通过加密通道进行传输以防止信息泄漏. 严重级别 高 前置条件 1 ...
- Web安全开发指南--异常错误处理与日志审计
1.异常错误处理与日志审计 5.1.日志审计系统安全规则 1 日志系统能够记录特定事件的执行结果(比如 成功或失败). 确保日志系统包含如下重要日志信息: 1. 日志发生的时间: 2. 事件的严重 ...
- web安全开发指南--权限管理
2.1 访问控制安全规则 1 访问控制必须只能在服务器端执行. 2 只通过session来判定用户的真实身份,避免使用其它数据域的参数(比如来自cookie.hidden域 ...
- Lightning Web Components 开发指南(二)
Lightning Web Components 是自定义元素使用html 以及现代javascript进行构建. Lightning Web Components UI 框架使用web compon ...
- Web安全开发指南--数据验证
1.数据验证 4.1.输入数据验证安全规则 1 数据验证必须放在服务器端进行. 2 至少对输入数据的数据类型.数据范围和数据长度进行验证. 3 所有来自不可信数据源(比如网络.用户命令.数据库和文件系 ...
随机推荐
- printk %pF %pS含义【转】
作者:啐楼链接:https://www.zhihu.com/question/37769890/answer/73532192来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出 ...
- MariaDB 层常用业务
前言 - 简单准备一下前戏 前面写过几篇mariadb 数据的随笔, 多数偏C/C++层面. 这次分享一下平时开发中, 处理的一些数据层面的业务. 对于MariaDB, 不做过多介绍. 如果你有U ...
- python按比例随机切分数据
在机器学习或者深度学习中,我们常常碰到一个问题是数据集的切分.比如在一个比赛中,举办方给我们的只是一个带标注的训练集和不带标注的测试集.其中训练集是用于训练,而测试集用于已训练模型上跑出一个结果,然后 ...
- Canvas开发库封装
一.Canvas第三方类库 1.常见的第三方类库 konva.js <style> body{ margin:0; } </style> </head> <b ...
- BlockingQueue drainTo()
BlockingQueue BlockingQueue的核心方法:放入数据: offer(anObject):表示如果可能的话,将anObject加到BlockingQueue里,即如果Blockin ...
- Django 批量导入文件
1. 按照xlrd软件 pip3 install xlrd 2. POST提交文件获取数据 方法一:写入硬盘,xlrd读取xlsx文件获取文件数据 def batch_view(self,reques ...
- 深度学习方法:受限玻尔兹曼机RBM(一)基本概念
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入. 最近在复习经典机器学习算法的同 ...
- 关于多属性查找问题的sphinx解决方案
需求描述 mysql中,每一个文档都有多个标签,查询时可以筛选一个标签也可以筛选同时拥有多个标签的文档. 数据示例 文档 标签 1 1,2,3,4,5 2 2,3,4,5,6 3 3,4,5,6,7 ...
- JDK1.8源码泛读之Arrays
jdk1.8包含的常用集合工具类,一般包括两个: 数组工具类:`java.util.Arrays ` 结合工具类:`java.util.Collections` 今天就结合源码对`java.util. ...
- 处理form表单提交后返回值的处理办法【html5】
同事朋友ajax,最近在弄公司业务电话机,自主搭建,买的设备. 其中最主要功能是前端发起呼叫,通过浏览器触发设备进行呼叫功能,走后台呼叫还不行. 需求是这样的: 前端给设备ip发送特定的一段xml信息 ...