【发布时间】:2015-07-11 19:15:46
【问题描述】:
显然,存储任何类型的第三方凭据都是一项重大风险,我希望尽可能避免这种情况。但是,我对它如何相对安全有一个想法,我想对此策略提出一些意见:
MySite 允许用户使用用户名和密码(或 Facebook,等等)进行注册!
如果该用户还使用用户名和密码在 AllTheData.com(此处称为 ATD)网站上注册,他们可以通过 HTTPS 向我提供这些信息。
MySite 接收到 ATD 的第三方凭据并做两件事:创建一个新的加密密钥,将其存储在用户的 cookie 中,并使用该密钥加密用户名和密码,并将这些加密值存储在数据库。
AllTheData.com 的数据库可能如下所示:
|用户 |密码 | JohnDoe@gmail.com | p4ssw0rd_hashedMySite 的数据库现在看起来像这样:
|用户 |密码 | ATD_username |ATD_pass | JohnDoe@gmail.com | another_p4ssw0rd_hashed| ct5lHMGymedITfElVA...|BHJCS38DkG7Zg0...并且用户的浏览器有一个带有key的cookie:
MySite_key: E3iKZxk2ZDD4EUb*fH$X6Mz5BO^iQeOM&V$lB0WAk4&WAB#A4QB8Yn7现在,当我需要访问服务时,我会从数据库中提取加密值,并从他们的请求中提取 cookie,然后我就可以访问服务器了!当然,如果他们的 cookie 已过期,或者他们已经清除了它们或切换了计算机或其他任何东西,那么我必须再次询问:(但如果这意味着我不必明文存储凭据,那就值得了!
我在这里做错了什么吗?这个计划有什么明显的问题吗?
谢谢!
【问题讨论】:
-
为什么用户首先要将他们的凭据提供给您的第 3 方服务? (顺便说一句,许多网站的 ToS 都禁止这样做。)您的网站打算提供什么样的服务?
-
我绝对同意,这是一个不寻常的情况。我的公司使用只能以表格格式报告的 CRM,因此为了进行任何可视化,我们必须将数据下拉到 Excel 或其他一些数据可视化工具。这只是为了允许我们通过 API 提取数据并使用 D3 和其他好东西进行数据可视化,但是这个 CRM 只允许通过基本身份验证访问 API。
标签: security cookies encryption