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 所有来自不可信数据源(比如网络.用户命令.数据库和文件系 ...
随机推荐
- 内核抢占实现(preempt) 【转】
转自:http://blog.chinaunix.net/uid-12461657-id-3353217.html 一.什么叫抢占所谓抢占,说白了就是进程切换.linux的用户空间,进程A在执行中,来 ...
- 转 白话解析:一致性哈希算法 consistent hashing
摘要: 本文首先以一个经典的分布式缓存的应用场景为铺垫,在了解了这个应用场景之后,生动而又不失风趣地介绍了一致性哈希算法,同时也明确给出了一致性哈希算法的优点.存在的问题及其解决办法. 声明与致谢: ...
- C# 使用HttpWebRequest Post提交数据,携带Cookie和相关参数示例
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- hadoop InputFormat 类别
FileInputFormat是所有使用文件作为数据源的InputFormat的积累.它提供两个功能:一个是定义哪些文件包含在一个作业的输入中:一个为输入文件生成分片的实现.自动将作业分块 作业分块大 ...
- IoT之车联网
一. 背景 这是一个笔者在实习公司策划的关于车联网的小项目,也是笔者参加某竞赛的作品<基于云平台的车内滞留儿童状况监测与处理>,本项目旨在为因各种原因导致儿童滞留车内热死.闷死的社会性事件 ...
- docker基于本地模版导入创建镜像
/* 因为直接去网站拿会下载的慢,所以直接到网站里,对着此包--〉右键--〉复制链接地址 网站地址:https://openvz.org/Download/template/precreated */ ...
- SRM 563 Div1 500 SpellCards
Description 有n张符卡排成一个队列,每张符卡有两个属性,等级lili和伤害didi. 你可以做任意次操作,每次操作为以下二者之一: 把队首的符卡移动到队尾. 使用队首的符卡,对敌人造成di ...
- MYSQL有外键无法删除
今天删除数据库中数据,提示因为设置了foreign key,无法修改删除 可以通过设置FOREIGN_KEY_CHECKS变量来避免这种情况. SET FOREIGN_KEY_CHECKS=0; 删除 ...
- 15:django 缓存架构
动态网站的一个基本权衡就是他们是动态的,每次一个用户请求一个页面,web服务器进行各种各样的计算-从数据库查询到模板渲染到业务逻辑-从而生成站点访问者看到的页面.从处理开销的角度来看,相比标准的从文件 ...
- IntelliJ IDEA centos安装
安装的时候注意: 不要装一个插件否则无法启动!!!