`

身份认证设计的基本准则

 
阅读更多

身份认证设计的基本准则

密码长度和复杂性策略

密码认证作为当前最流行的身份验证方式,在安全方面最值得考虑的因素就是密码的长度。一个强度高的密码使得人工猜测或者暴力破解密码的难度增加。下面定义了高强度密码的一些特性。

1)密码长度

对于重要的应用,密码长度最少为6;对于关键的应用,密码长度最少为8;对于那些最关键的应用,应该考虑多因子认证系统。

2)密码的复杂度

有的时候仅有长度约束是不够的,比如说1234567811111111这样的密码,长度的确是8位,但极容易被猜测和字典攻击,所以这时候就需要增加密码复杂度。下面列举了一些提供复杂度的策略。

— 至少一个大写字母(AZ)。

— 至少一个小写字母(az)。

— 至少一个数字(09)。

— 至少一个特殊字符(!@#$%^&等)。

— 定义最少密码长度(如8个字符)。

— 定义最长密码长度(如16个字符)。

— 不能出现连续的字符(如123abcdef)。

— 不能出现连续相同的字符(如1111)。

一旦我们定义好了这些策略,在用户注册时就可以强制用户输入高强度的密码,从而提高密码的安全性。

实现一个安全的密码恢复策略

上一节介绍了密码的长度和复杂度,有时,太复杂的密码自己都给忘记了,该怎么办?所以一般来说,一个应用会提供密码恢复功能。鉴于大部分应用都提供了电子邮箱这具有唯一性字段的恢复方式,所以可见最常见的方式就是让用户输入电子邮箱,输入电子邮箱后,一般会有以下两种解决方法。

1)把原来的密码发送到用户信箱中去。

我个人的意见是,如果这样做,说明这个应用可以得知你的密码明文,这与系统只存hash/加密值的单项策略相违背,若哪一天这个程序的数据库被攻克,所有的明文就会被很容易地得知,所以这种方式还是不值得提倡。

2)重设一个临时密码,用户用这个密码登录然后修改密码。

这是一个相对较好的方法,通常为了增加安全性,我们还可以给这个临时密码一个有效期,如用户必须24小时内使用这个密码登录等。

上面的密码恢复策略是基于一个事实的,就是你的电子邮箱应该足够安全(没有人知道你的邮箱密码)。但是如果这个应用具有CSRF漏洞,即电子邮件可能被修改成一个攻击者的邮箱而受害者却毫无所知,这时候如果进行密码恢复就会把密码发到攻击者的信箱里,那么该怎么办呢?

答案是更新重要字段时需要重新认证。比如用户的密码、电子邮件等,如果用户需要更新,则弹出一个对话框让用户输入原先的密码,这样就可以有效地防止CSRF攻击。

重要的操作应通过HTTPS传输

对于重要的操作,如登录、修改密码等,一定要通过HTTPS进行传输。我们就以Tomcat为例,说明一下如何进行配置,使得指定的URL必须走HTTPS

首先是产生一个证书。为了说明方便,我们采用Java提供的keytool产生一个自认证证书,命令如下:%JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA。然后回答一些问题,这里注意设置证书库的密码和key的密码,我们这里设置为changeit,这样就会产生一个证书库,如图10-22所示。

10-22  Java生成一个证书库

后在把产生的.keystore复制到{TOMCAT_HOME}\conf目录下,配置server.xml如下:

<Connector protocol="org.apache.coyote.http11.Http11NioProtocol"

           port="8443" SSLEnabled="true"

maxThreads="150" scheme="https" secure="true"

clientAuth="false" sslProtocol="TLS"

keystoreFile="${user.home}/.keystore"  keystorePass="changeit" />

—   最后我们再配置APP应用下的WEB-INF\web.xml如下:

<security-constraint>

    <web-resource-collection>

        <web-resource-name>must https</web-resource-name>

        <url-pattern>/login.jsp</url-pattern>

    </web-resource-collection>

    <user-data-constraint>

        <transport-guarantee>CONFIDENTIAL</transport-guarantee>

    </user-data-constraint>

</security-constraint>

设置哪些URL 需要走HTTPS

认证错误信息以及账户锁定

下面是一些不正确的认证错误信息:

— 登录失败,用户Kevin的密码错误。

— 登录失败,无效的用户名。

— 登录失败,该用户已被禁用。

— 登录失败,该用户没有被激活。

正确的表达方式应该是唯一的一种:

— 登录失败,用户名或密码错误。

不正确的认证错误信息可能会导致字典攻击或者暴力破解,所以我们要尽可能地给出一个很普遍的错误信息。

此外为了防止暴力攻击,我们可以设定下列规则:

— 第一次登录失败,下一次登录至少间隔5s

— 第二次登录失败,下一次登录至少间隔15s

— 第三次登录失败,下一次登录至少间隔45s

— 第四次登录失败,集成图形验证码CAPTCHA,让用户输入图片中的字符串。

如果有足够明显的证据显示是暴力破解(如每分钟进行了100次尝试),IP地址或者Session ID应该在接下来一段时间(如15分钟)被阻止,在这种情况下,我们应该给出清楚明白的错误信息,说明为什么这个登录会失败。

 

本文节选自《Web应用安全威胁与防治——基于OWASP Top 10ESAPI



 

王文君  李建蒙 编著

电子工业出版社出版

 

 

 

  • 大小: 231.5 KB
0
3
分享到:
评论

相关推荐

    身份认证系统 网络安全

    身份认证系统应满足以下基本需求: - 可靠性:确保只有真实身份的用户能够通过认证。 - 安全性:防止伪造、欺骗或窃取身份信息。 - 易用性:使用户能够方便快捷地完成认证过程,避免过于复杂的步骤导致用户体验下降...

    python毕业设计之web服务统一身份认证协议设计源码.zip

    在本项目中,"python毕业设计之web服务统一身份认证协议设计源码.zip"是一个针对Python编程语言的毕业设计项目,旨在实现Web服务中的统一身份认证协议。这个设计通常涉及OAuth或OpenID Connect等标准,这些协议允许...

    web服务统一身份认证协议设计源码&python毕业设计.zip

    【标题】"Web服务统一身份认证协议设计"是基于Python技术实现的一个项目,它涉及到的主要概念包括Web服务、身份认证和统一身份验证协议。在Web服务领域,身份认证是确保只有授权用户能够访问受保护资源的关键步骤。...

    统一身份认证系统技术方案.doc

    统一身份认证系统的设计原则是指在设计系统时需要遵循的一些基本原则,包括: * 单一身份认证:统一身份认证系统应该提供单一的身份认证机制,以确保用户的身份信息是一致的。 * 角色 기반 认证:统一身份认证系统...

    《Web服务统一身份认证协议设计与实现》本科毕业论文一万字.doc

    第二章,Web服务统一身份认证协议相关理论,详细解释了Web服务身份认证的基本概念,以及设计这类协议应遵循的原则,如互操作性、安全性、隐私保护和可扩展性。 第三章,协议设计部分,作者会详细分析协议的需求,...

    信息安全导论-第五章身份认证

    身份认证系统的设计需要满足以下基本要求: 1. **验证者正确识别合法申请者的概率极大化**:确保系统能够准确无误地识别合法用户。 2. **不具有可传递性**:即认证信息不能被第三方使用,以防止身份冒用。 3. **...

    基于隐形传态的量子通信局域网身份认证研究.pdf

    为支持这一身份认证方法,本文还设计并实现了相应的量子通信局域网身份认证系统。系统架构的合理设计是实现安全身份认证的前提,本文提出了一套完整的系统架构方案,包括认证服务器、认证代理以及客户端等多个部分。...

    身份认证系统技术方案共23页.pdf.zip

    9. **安全设计原则**:最小权限原则、审计与日志记录、故障安全设计等都是身份认证系统设计的基本原则,方案会阐述这些原则在实际系统中的应用。 10. **灾难恢复与备份策略**:确保即使在系统故障时也能维持认证...

    基于Java2的身份认证数字签名和SSL实现技术

    身份认证通常涉及用户身份的验证,这可以通过公钥基础设施(PKI)中的数字证书来实现。数字签名则用于确保数据的完整性和来源的可信度,通过生成和验证签名来实现。JCA提供了生成和验证数字签名的API,而JCE则负责...

    具有设计令牌身份验证的Rabl示例_Ruby_JavaScript_下.zip

    **标题与描述解析** 标题"具有设计令牌身份验证的Rabl示例_Ruby_...通过深入研究这个项目,开发者可以提升对Rabl、设计令牌、Ruby on Rails以及前后端协作的理解,同时学习到如何将设计原则应用于服务器端身份验证。

    XXX统一身份认证项目方案

    - **主要功能设计**:包括统一授权、身份认证、单点登录、信息共享、后台管理、数据服务和安全审计等核心功能。 - **统一授权**:为用户提供数字证书和私钥,并进行权限分配。 - **身份认证**:使用包含数字证书和...

    系统权限管理软件设计说明书,抽象了统一身份认证和鉴权体系

    ### 系统权限管理设计知识...通过以上设计,系统权限管理软件能够实现统一的身份认证和鉴权体系,为用户提供灵活的角色管理机制,并确保数据的安全性和合规性。同时,通过详尽的日志记录功能,还能满足后续审计的需求。

    计算机等考四级网络工程师知识点:网络系统统结构与设计的基本原则.docx

    "计算机等考四级网络工程师知识点:网络系统统结构与设计的基本原则" 本文档主要介绍了网络系统统结构与设计的基本原则,涵盖了网络系统的分类、结构、设计原则和技术要点等方面的内容。 一、网络系统分类 * ...

    智能身份认证终端公司(行业)薪酬管理制度方案-薪酬设计方案资料文集系列.docx

    本篇文章将深入探讨和解读“智能身份认证终端公司薪酬设计方案资料文集系列”,并以此为蓝本,详细阐释其薪酬制度设计的核心要点以及其对企业发展的影响。 一、薪酬制度的基本原则和适用范围 薪酬管理制度的设计...

    关于布尔函数设计准则的密码学论文

    布尔函数是密码学中的重要组成部分,用于构造密码系统的核心算法,尤其是在数据加密、数字签名和身份验证等方面发挥关键作用。 1. 密码学基础 密码学是一门研究信息保密的科学,它通过加密技术确保只有预期的接收者...

    身份认证系统公司(行业)薪酬管理制度方案-薪酬设计方案资料文集系列.docx

    身份认证系统公司作为特定行业的一份子,其薪酬管理制度的设计方案无疑需要格外关注其行业的特点和员工的需求,才能确保公司的薪酬政策既能体现行业特性,又能满足员工期望,从而形成公司独特的竞争优势。...

    7、数据库安全基本原则.doc

    ### 数据库安全基本原则 #### 教学目标与重点难点 - **教学目的**:通过本章节的学习,学生能够掌握数据库安全的基本原则,并了解如何实施有效的安全措施以保护数据免受未授权访问、泄露或篡改。 - **学习重点**:...

    开源项目管理软件禅道使用帮助

    2. **敏捷实践**:软件设计遵循敏捷开发原则,特别是Scrum方法论,促进高效、灵活的项目推进。 3. **便捷性**:采用B/S架构,便于远程协作和跨平台使用,降低了硬件和部署成本。 4. **易用性**:禅道拥有直观的界面...

    统一用户管理及认证系统概要设计说明书.docx

    设计说明书的首要目标是明确系统开发的目标和范围,旨在为开发团队提供一个清晰的指导框架,确保用户管理及认证系统能够满足互联网环境中对用户身份验证和权限控制的需求。它还旨在确保系统的可扩展性和适应性,以便...

Global site tag (gtag.js) - Google Analytics