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、       图形验证码


简要描述


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


解决方案


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

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

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

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

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

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


备注


 

时间: 2024-12-22 00:43:23

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

Web安全开发指南 PDF

<Web安全开发指南> PDF 只需一元 链接:https://pan.baidu.com/s/1beqor1MxDJiM1cstfpXZew 密码:5zvg 原文地址:https://www.cnblogs.com/luoshuifusheng/p/9305181.html

Web安全测试指南--认证

认证: 5.1.1.敏感数据传输: 编号 Web_Authen_01_01 用例名称 敏感数据传输保密性测试 用例描述 测试敏感数据是否通过加密通道进行传输以防止信息泄漏. 严重级别 高 前置条件 1.  已明确定义出敏感数据范围(比如口令.短信验证码和身份证号等). 2.  目标web应用可访问,业务正常运行. 3.  已安装http拦截代理(burp.fiddler或webscarab均可). 执行步骤 1.  开启burp,设置对http请求进行拦截,并在浏览器中配置代理. 2.  访问w

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

1.会话管理 3.1.会话管理安全规则 1 避免在URL携带session id. 2 使用SSL加密通道来传输cookie. 3 避免在错误信息和调试日志中记录session id. 4 使用框架自带的或业界公认的安全函数来生成session id(参考附录11.4). 5 开发或引入无状态的模块(比如shipin7 nodejs和视频留言模块)时,应与web模块的session机制结合,防止越权或无授权攻击. 6 当使用加密通道SSL/TLS传输cookie时,为其设置“secure”属性.

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

6.1.上传文件功能 简要描述 文件上传漏洞是由于文件上传功能实现代码没有对用户上传的文件进行正确处理,导致允许攻击者向服务某个目录上传文件. 解决方案 上传文件功能只对登录用户开放: 同时通过文件头和文件扩展名来判断文件类型: 判断文件类型时尽量使用黑名单的方式,可以使用较粗粒度方式,比如过滤".php"字串(忽略大小写)来防止php文件的上传: 过滤上传路径或文件名中的NULL字符,防止NULL字符截断: 如果上传的文件为图片,可对图片进行压缩处理再存储: 不要将上传文件的绝对路径

web安全开发指南--访问控制

2.1               访问控制安全规则 1 访问控制必须只能在服务器端执行. 2 只通过session来判定用户的真实身份,避免使用其它数据域的参数(比如来自cookie.hidden域.form和URL参数等)来做访问控制. 3 对web/应用服务器进行安全配置以防止用户对静态文件的无鉴权访问(参考附录11.6). 4 对每一个请求页面都执行严格的访问控制检查(参考附录11.2). 5 应建立集中式的权限验证接口(参考附录) 2.2               纵向越权 简要描述

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

1.异常错误处理与日志审计 5.1.日志审计系统安全规则 1 日志系统能够记录特定事件的执行结果(比如 成功或失败). 确保日志系统包含如下重要日志信息: 1.  日志发生的时间: 2.  事件的严重等级: 3.  能够标识该事件为安全事件的标签: 4.  导致事件产生的对象: 5.  导致事件产生的IP地址: 6.  事件的结果(成功或失败): 7.  关于事件的描述. 2 如果使用浏览器查看日志,确保先对日志数据进行净化.(item1.2请参考附录11.8) 3 不要在日志中存储任何敏感数据

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

1.数据验证 4.1.输入数据验证安全规则 1 数据验证必须放在服务器端进行. 2 至少对输入数据的数据类型.数据范围和数据长度进行验证. 3 所有来自不可信数据源(比如网络.用户命令.数据库和文件系统等)的数据都要进行有效验证(参考11.7 ESAPI方案). 4 来自客户端的所有参数的数据都要进行验证,比如HTTP header的键值对. 5 数据验证不通过时应默认拒绝处理该请求. 6 应尽可能地使用"白名单"而非"黑名单"的方式对数据进行验证. 4.2.输出数

移动应用安全开发指南(Android)--完结篇(http://www.bubuko.com/infodetail-577312.html)

1.认证和授权 概述 认证是用来证明用户身份合法性的过程,授权是用来证明用户可以合法地做哪些事的过程,这两个过程一般是在服务器端执行的,但也有的APP出于性能提升或用户体验等原因,将其做在客户端完成,由此导致客户端绕过等问题. 安全准则 在客户端做认证和授权是很难保证安全的,所以应该把认证和授权做在服务器端.如果确实有特殊的需求,可以和安全工程师进行沟通做单一case分析. 尽可能避免在设备上存储用户名和密码,可以使用登录认证后获得的token进行鉴权(同时注意控制token的有效期). 详细描

移动应用安全开发指南(Android)--完结篇

如果IE显示格式不正常,请使用chrome浏览器 1.认证和授权 概述 认证是用来证明用户身份合法性的过程,授权是用来证明用户可以合法地做哪些事的过程,这两个过程一般是在服务器端执行的,但也有的APP出于性能提升或用户体验等原因,将其做在客户端完成,由此导致客户端绕过等问题. 安全准则 A.      在客户端做认证和授权是很难保证安全的,所以应该把认证和授权做在服务器端.如果确实有特殊的需求,可以和安全工程师进行沟通做单一case分析. B.      尽可能避免在设备上存储用户名和密码,可以