web安全之保障验证机制的安全(一)

使用可靠的证书

  • 应强制执行适当的最小密码强度要求。这些要求包括:最小密码长度,使用字母、数字和排版字符,同时使用大、小写字符,避免使用字典中单词、名称和其他常见密码,避免以用户名为密码,避免使用和以前的密码相似或完全相同的密码。和大多数安全措施一样,不同的密码强度要求适用于不同类型的用户。

  • 应使用唯一的用户名。

  • 系统生成的任何用户名和密码应具备有足够的随机性,其中不包含任何顺序,即使攻击者访问大量连续生成的实例也无法对其进行预测。

  • 允许用户设置足够强大的密码。例如,应允许其设置长密码,允许在密码中适用各种类型的字符。

安全处理证书

应以不会造成非授权泄露的方式创建、保存和传送所有证书。

应用使用公认的加密技术(如 SSL)保护客户端和服务端的所有通信。

如果认为最好在应用程序的不需验证的区域使用 HTTP,必须保证使用 HTTPS加载登录表单,而不是在提交登陆信息时才转换到 HTTPS。只能使用 POST 请求向服务端传输证书。

一般来说,客户端“记住我”功能应仅记忆如用户名之类的非保密数据。

应使用一种密码修改共军,要求用户定期修改其密码。

如果以非正常交互的形式向新建账户分配证书,应以尽可能安全的形式传送证书,并设置时间限制,要求用户在第一次登录时修改证书,并告诉影虎在初次使用后销毁通信渠道。

应考虑在适当的地方使用下拉菜单而非文本文字字段截取用户的一些登录信息。这样做可防止安装在用户计算机上的键盘记录器截获他们提交的所有数据。(但是,还请注意,简单的键盘记录器只是攻击者用于截获用户输入的一种手段)。如果攻击者已经攻破计算机,那么从理论上讲,他就能够记录计算机上发生的各种类型的事件,包括鼠标活动、通过 HTTPS 提交的表单以及截屏。

正确确认证书

应确认完整的密码。也就是说,区分大小写,不过滤或者修改任何字符,也不截短密码。

应用程序应在登录处理过程中主动防御无法预料的事件。例如,根据开发语言,应用程序对捕获异常之后可删除用于控制登录状态的所有会话和方法内部数据,并使当前会话完全失效。因此,即使攻击者以某种方式避开验证,也会被服务器强制退出。

应对验证逻辑的伪代码和实际的应用程序源代码进行仔细的代码审查,以确定故障开放条件之类的逻辑错误。

如果应用程序执行支持用户伪装功能,应严格控制这种功能,以防止攻击者滥用它获得为授权访问。鉴于这种功能的危险程度,通常有必要从面向公众的应用程序中彻底删除改功能,只对内部管理用户开放改功能,而且他们使用伪装也应接受严格控制与审核。

应对多阶段登录进行严格控制,以防止攻击者破坏登录阶段之间的转换与关系。

  1. 禁止用户多次提交一项登录信息;禁止用户修改已经被收集或者确认的数据。如果需要在几个阶段使用同一数据,应在第一次收集时将该数据保存在会话变量中,随后从此处引用该数据。

  2. 在每一个登录阶段,应首先核实前面的阶段均已顺利完成。如果发现前面的阶段没有完成,应立即将验证尝试标记为恶意尝试。

  3. 为防止泄露的是哪个登录验证阶段失败(攻击者可利用它轮流针对每个阶段发动攻击)的信息,即使用户无法正确完成前面的阶段,即使最初的用户名无效,应用程序也应总是处理完成所有的登录阶段。在处理完成所有的登录阶段后,应用程序应在最后阶段结束是呈现一条常规“登录失败”消息,并且不提供失败位置的任何信息。

如果在登录过程中需要回答一个随机变化的问题,请确保攻击者无法选择回答问题。

  1. 总是采用一个多阶段登录过程,在第一阶段确认用户身份,并在后面的阶段向用户提出随机变化的问题。

  2. 如果已向某一用户提出一个特定的问题,将该问题保存在永久性用户资料中,确保每次该用户尝试登录时向其提出相同的问题,直接该用户正确回答这个问题。

如果向某个用户提出一个随机变化的质询,将提出的问题保存在服务器端会话变量而非 HTML 表单的隐藏字段中,并根据保存的问题核实用户随后提供的答案。

防止信息泄露

应用程序使用的各种验证机制不应通过公开的消息,或者通过从应用程序的其他行为进行推测,来揭示关于验证参数的任何消息。攻击者应无法判断是提交的哪个数据造成了问题。

应由单独一个代码组件使用一条常规消息负责相应所有失败的登录尝试。这样做客避免由不同代码路径返回的本应不包含大量信息的消息,因为消息排版方面的差异、不同的 HTTP 状态码、其他隐藏在 HTML 中信息等内容而让攻击者看出差别,从而产生一个细微的漏洞。

如果应用程序实行某种账户锁定以防止蛮力攻击,应小心处理以防止造成信息泄露。

如果应用程序支持自我注册,那么能够以两种方式防止这种功能被用于枚举现有用户名。

  1. 不允许自由选择用户名,应用程序可为新用户建立一个唯一(或者无法预测)的用户名,防止应用程序纰漏表明一个选定的用户名已经存在信息。

  2. 应用程序可以使用电子邮件地址作为用户名。利用邮件通知一个唯一或者无法猜测的 url 继续注册,这样可以防止攻击者枚举有效的用户名(除非他们碰巧已经攻破大量电子邮件账户)。

后续的文章继续:

防止蛮力攻击

防止滥用密码修改的功能

防止滥用账户回复功能

日志、监控与通知

转载于:https://my.oschina.net/jeeker/blog/611765

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值