今年立下决心:永远不要自己写身份验证
内容
简介
为什么
选项
概括
内容
简介
最近我看到一些博客和推文谈论身份验证和处理密码,这让我思考......
首先我要声明一下。
我非常支持学习身份验证的工作原理,如果你和我一样,我建议你通过实践来学习,所以我在本地尝试过身份验证。但不要把它推广到生产环境中。
为什么
身份验证通常是应用程序安全的关键。
过去几年,应用程序数据泄露事件持续增加,因此应用程序安全必须成为重中之重。即使
在使用身份验证系统之前,也有很多关于应用程序安全的问题需要考虑。
正在考虑编写自己的身份验证吗?
那么 Cookie 呢?
Cookie 是明文的,所以你肯定不想在其中存放任何机密信息,以免被任何使用计算机的人看到。
它是否使用 Path 参数将 Cookie 限制在你的应用程序中?
它是否在子域之间共享?
它是安全的,并且仅通过 HTTPS 连接可用?
跨站点脚本 (XSS) 攻击怎么办?
浏览器存储
好的,您已经处理了 Cookie。
但也许您将数据存储在浏览器存储中——切勿将任何敏感信息或个人身份信息 (PII) 存储在浏览器存储中——您是否确保了这种存储方式尽可能安全?例如,使用会话存储而不是本地存储。
速率限制
那么限制请求数量怎么样?这样就不会有人不断尝试不同的密码了。
你们打算如何实现速率限制?基于 IP、基于 Cookie 等等。
你们会在尝试 X 次后锁定特定的 IP 地址吗?
那些被锁定的有效用户怎么办?
密码安全
现在我们来谈谈密码。你会设置密码要求吗?如果会,你会如何设置?
你会检查密码是否被泄露,例如通过https://haveibeenpwned.com/
吗? 你是如何存储密码的?如果有人输入了一个很长的密码,比如用密码管理器生成的,它会被截断吗?(我见过很多次这种情况)
你是如何对密码进行哈希和加盐处理的?
千万不要将密码以明文形式保存。
数据库安全
所以,你把它们存储在某个数据库中。
你如何保护这个数据库,确保它不被攻破?
如果数据库真的被攻破了,你如何将记录数量限制到尽可能少?
数据库周围的网络安全又如何保障呢?
选项
所以,你想得对,你已经表达了你的观点,那么我还有什么选择呢?
好吧,你真幸运!现在有很多IDaaS(身份即服务)产品。
它们通常都有很棒的免费套餐,例如Azure B2C每月有5万活跃用户……免费!
与任何事情一样,您需要找到最适合您用例的方法,因此我将在下面列出一些供您查看:
Auth0
Azure AD
Azure B2C - 企业对客户
AWS Cognito
Firebase 身份验证
Okta
OneLogin
Magic
Twilio
这些公司拥有专门的团队来确保他们的身份验证是安全的,而他们的职责就是确保身份验证是安全的!
概括
总而言之,身份验证很难!有很多方面需要考虑,我列出的只是冰山一角,有些方面你仍然需要考虑,例如常规数据库安全。
不过,有很多身份验证提供商可供你使用,甚至免费!
专注于能为你的应用/业务增值的东西!把身份验证留给那些真正负责认证的公司吧 :D
请在下面告诉我您最喜欢的身份验证提供商!
祝您搭建愉快!
文章来源:https://dev.to/jordanfinners/make-one-resolution-this-year-never-write-your-own-authentication-3nc1