身份证验证 校验码_用户身份验证最佳做法清单

身份证验证 校验码

用户身份验证是每个Web应用程序共享的功能。 我们已经实施了很多次了,所以早就应该完善它了。 然而,错误无时无刻不在。

造成这种情况的部分原因是,可能出错的事情列表很长。 您可能会错误地存储密码,可能会具有脆弱的密码重置功能,可能使会话遭受CSRF攻击,会话可能被劫持,等等。因此,我将尝试汇编有关用户身份验证的最佳做法列表。 每年, OWASP TOP 10始终是您应该阅读的东西。 但这可能还不够。

所以,让我们开始吧。 我会尽量简明扼要,但我会尽可能涵盖所有相关的陷阱-例如,用户会话登录后可能出什么问题:

  • 使用bcrypt / scrypt / PBKDF2存储密码。 没有MD5或SHA,因为它们不利于密码存储。 长盐(每位用户)是强制性的(上述算法已内置)。 如果您不这样做,并且有人控制了您的数据库,则他们将能够提取所有用户的密码。 然后在其他网站上尝试这些密码。
  • 使用HTTPS。 期。 (否则,用户凭据可能会通过不受保护的网络泄漏)。 如果用户打开纯文本版本,则强制使用HTTPS。 并确保仅使用最新的协议(目前使用TLS 1.2; TLS 1.1似乎没有漏洞,因此也可以受支持)。 您可以进行Qualys扫描以检查支持的协议版本是否正确。
  • 将Cookie标记为secure 。 使饼干盗窃更加困难。
  • 使用CSRF保护(例如,随每个请求验证的CSRF一次性令牌)。 框架具有内置的此类功能。
  • 禁止取景( X-Frame-Options: DENY )。 否则,您的网站可能会以隐藏的iframe包含在另一个网站中,并通过javascript被“滥用”。
  • 有一个同源政策
  • 注销–通过删除所有cookie并使会话无效,让您的用户注销。 这样可以更安全地使用共享计算机(是的,用户最好使用私有浏览会话,但并非所有人都那么聪明)
  • 会话期满–没有永久的会话。 如果用户关闭您的网站,则其会话应在一段时间后到期。 取决于提供的服务,“一会儿”可能仍然是很大的数字。 对于ajax繁重的网站,您可以进行常规的ajax轮询,以在页面保持打开状态时使会话保持活动状态。
  • 记住我-由于永久性cookie被盗的风险,(在这台机器上)实现“记住我”功能实际上很困难。 Spring-security使用这种方法 ,如果您想实现更持久的登录,我认为应该遵循。
  • 忘记密码流–忘记密码流应依赖于向用户发送一次(或到期)链接,并在打开密码时要求输入新密码。 0Auth在这篇文章中对此进行了解释 ,邮戳给了一些最好的事实 。 如何形成链接是一个单独的讨论,有几种方法。 将密码重置令牌存储在用户配置文件表中,然后将其作为参数发送到链接中。 或者不要在数据库中存储任何内容,而是发送一些参数: userId:expiresTimestamp:hmac(userId+expiresTimestamp) 。 这样,您将拥有过期的链接(而不是一次性链接)。 HMAC依赖于秘密密钥,因此不会欺骗链接。 但是,由于OWASP指南的方法略有不同 ,因此在该主题上似乎尚未达成共识
  • 一次性登录链接–这是Slack使用的选项,它发送一次性登录链接,而不是询问用户密码。 它取决于您的电子邮件受到严格保护,并且您始终可以访问它。 如果不经常访问您的服务,则可以使用该方法代替密码(而不是除密码之外)。
  • 限制登录尝试–无法通过Web UI进行暴力破解; 因此,如果登录尝试次数过多,则应将其阻止。 一种方法是仅基于IP阻止它们。 另一种是根据尝试的帐户阻止它们。 ( 这里是Spring示例 )。 哪一个更好-我不知道。 两者实际上可以合并。 除了完全阻止尝试之外,您还可以在第5次尝试后添加验证码。 但是,请勿在首次尝试时添加验证码-这是糟糕的用户体验。
  • 不要通过错误消息泄漏信息–您不应该允许攻击者弄清楚是否已注册电子邮件。 如果未找到电子邮件,则在登录时仅报告“凭据不正确”。 重置密码时,可能类似于“如果您的电子邮件已注册,您应该已经收到了密码重置电子邮件”。 这通常与可用性不符–人们通常不记得他们过去用来注册的电子邮件,因此在进入之前检查大量电子邮件的能力可能很重要。 因此,此规则不是绝对的,尽管这是理想的,尤其是对于更关键的系统。
  • 确保仅在确实必要时才使用JWT,并要注意一些陷阱。
  • 考虑使用第三方身份验证-OpenID Connect,Google / Facebook / Twitter的OAuth (但也要注意OAuth的缺陷 )。 依靠第三方身份提供者存在相关风险,您仍然必须管理cookie,注销等,但是简化了某些身份验证方面。
  • 对于高风险或敏感应用程序,请使用2因子身份验证 。 不过,Google身份验证器有一个警告-如果您丢失了手机,则会丢失帐户(除非有手动过程来恢复它)。 这就是为什么Authy似乎是存储2FA密钥的好解决方案。

我确定我缺少什么。 您会发现它很复杂。 遗憾的是,我们仍然处在最常用的功能(验证用户身份)的棘手和繁琐的位置,以至于您几乎总是会误解其中的至少一部分。

翻译自: https://www.javacodegeeks.com/2018/04/user-authentication-best-practices-checklist.html

身份证验证 校验码

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/333580.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql查询不确定的信息_mysql 07.18

1.索引搜索引导,索引是一个特殊的数据结构,期存储的是数据的关键信息与详细详细的位置对应关系。目的:加速查询。索引的影响:不是说拥有索引就能加速,得看你的查询语句有没有正确使用索引,索引也需要占用额…

MacOS 常用命令汇总

文章目录设置环境变量列出所有可以更新的软件包直接更新所有可以更新的软件包打包压缩文件忽略 Mac OS 文件系统中的扩展属性忽略 Mac OS 专有的隐藏文件创建 DMG 格式的文件修改 DMG 文件的大小修改 DMG 格式中的加密口令挂载 DMG 格式的文件推出 DMG 文件将 ISO 格式的文件转…

java多功能钟_Java 11将包含更多功能

java多功能钟Java 11即将发布的功能是什么?它与Java 9和10有何不同? Java 10可能是新手,但现在该谈论Java 11了。Oracle迈向更快的发布周期意味着更多的特性和功能以比以往更快的速度出现。 尽管距离Java 11发行还有六个月的时间&#xff0…

MacOS 好用的插件和图形界面程序

文章目录文件预览插件OS X 图形界面程序文件预览插件 有些插件可以让 Mac 上的文件预览更有效,比如语法高亮、markdown 渲染、json 预览等。 $ brew cask install qlcolorcode $ brew cask install qlstephen $ brew cask install qlmarkdown $ brew cask install…

java 线程安全性_我如何测试Java类的线程安全性

java 线程安全性我在最近的一次网络研讨会中谈到了这个问题,现在是时候以书面形式进行解释了。 线程安全是Java等语言/平台中类的重要品质,在Java中我们经常在线程之间共享对象。 缺乏线程安全性导致的问题很难调试,因为它们是零星的&#xf…

java asin_Java asin()方法

Java asin()方法asin() 方法用于返回指定double类型参数的反正弦值。语法doubleasin(doubled)参数 d -- 任何原生数据类型。返回值返回指定double类型参数的反正弦值。实例public class Test{public static void main(String args[]){double degrees 45.0;double radians Mat…

MacOS 的软件包管理工具 HomeBrew 详解

文章目录一、软件介绍二、安装 Homebrew使用 Ruby 或者 Shell 脚本安装手动 clone 安装三、卸载 Homebrew四、Homebrew 安装目录五、安装包所在位置六、程序安装目录七、软件版本切换八、清除旧版本文件九、brew 命令汇总安装、升级和删除软件包查看和检验软件包参考示例服务相…

java中的深度克隆浅克隆_了解Java中的可克隆接口

java中的深度克隆浅克隆什么是对象克隆? 对象克隆是生成具有不同名称的对象的精确字段到字段副本的过程。 克隆的对象在内存中有自己的空间,可在其中复制原始对象的内容。 这就是为什么在克隆后更改原始对象的内容时,所做的更改不会反映在克隆…

python env_#!/usr/bin/env python 有什么用?

我们经常会在别人的脚本或者项目的入口文件里看到第一行是下面这样#!/usr/bin/python或者这样#!/usr/bin/env python那么他们有什么用呢?要理解它,得把这一行语句拆成两部分。第一部分是 #!第二部分是 /usr/bin/python 或者 /usr/bin/env python关于 #! …

MacBook(macOS) 如何安装 Homebrew Cask(作废)

文章目录重要通知(不要再去安装 Homebrew Cask 了)Homebrew Cask 简介相关文件和目录Homebrew Cask 安装使用命令下载安装直接从官网下载安装包利用国内源手动 clone下载(推荐)Homebrew Cask 换源重要通知(不要再去安装…

java.io.file()_JAVA基础知识之IO-File类

File类介绍File是java.io包下面的一个类,代表与平台无关的文件或者目录。JAVA中,无论文件还是目录,都可以看作File类的一个对象。File类能对文件或目录新建,删除,获取属性等操作,但是不能直接操作文件内容(…

netflix 模式创新_创新设计模式:单例模式

netflix 模式创新单例设计模式是一种软件设计模式,用于将类的实例化限制为一个对象。 与其他创建设计模式(例如抽象工厂 , 工厂和构建器模式)相比,单例将创建一个对象,但也将负责,因此该对象只…

美式英语 [t] 的发音

爆破音 true [t],发真实的 t。 单词的开始处重读音节的开始处,且前面没有跟着清辅音 [s] held 住不发声 叫法很多,声门塞音、吞音、喉塞(s)音、stop [t],held [t],不爆破的 [t]。 发音的口…

设计模式 原型模式_创新设计模式:原型模式

设计模式 原型模式原型模式用于创建对象的副本。 这种模式非常有用,特别是当从头开始创建对象的成本很高时。 与builder , factory和abstract factory模式相比,它不会从头开始创建对象,而是会克隆/重新创建它。 与单例模式相比&a…

java file 对象_Java里File对象的问题。

Java里File对象的问题。关注:282 答案:2 mip版解决时间 2021-02-02 07:14提问者鉨瞞着所囿亾,爱着誰2021-02-01 08:59import java.io.*;在此基础上怎么修改呢? 谢谢啦最佳答案二级知识专家山河已春2021-02-01 10:06import java.io.*;class JavaFileLis…

美式英语中 [d] 的特别发音

闪音 flap [d],fast [d],闪音 [d] 发音口腔部位说明:舌尖快速拍打上齿龈后,快速释放,轻快拍打 [d] 在两个元音之间发成 fast [d],非重读音节在元音和 [l] 之间发成 fast [d],非重读音节在[r]…

netflix 模式创新_创新设计模式:工厂模式

netflix 模式创新以前,我们对创建模式进行了介绍,并使用抽象工厂模式来创建对象族。 下一个模式是Factory模式 。 当涉及到Java时,工厂模式是最常用的模式之一。 那么工厂模式到底是什么呢? 工厂模式处理创建对象而不指定确切的…

g++ 编译mysql动态库_Linux下g++编译以及使用静态库和动态库的方法详解

下面小编就为大家带来一篇Linux下g编译与使用静态库和动态库的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧在windows环境下,我们通常在IDE如VS的工程中开发C项目,对于生成和使用静态库(*.…

家用电器如何计算功率和消耗的度数

计算公式:((U*I)/1000)*t 说明: 这里计算的都是电器的额定功率、额定电压、额定电流。U 是电压;I 是电流;t 是时间,单位是小时;U*I 得到的是电功率,例如电压12v,电流5A,…

构建器设计模式_创新设计模式:构建器模式

构建器设计模式以前我们看过工厂和抽象工厂模式。 这些模式可以达到目的,并且确实有用,但是在某些用例中,我们必须创建一个非常复杂的对象,并且创建它需要不同的步骤,每个步骤都需要不同的操作。 在这种情况下&#xf…