【问题标题】:Keeping Users Anonymous - Secure DB Only Option - General Thoughts?保持用户匿名 - 仅安全数据库选项 - 一般想法?
【发布时间】:2016-03-25 19:51:26
【问题描述】:

我正在开发一个网络应用程序,正在考虑如何让用户的身份完全匿名。

不过我得出了结论,我无能为力 - 除了专注于保护数据库不被黑客入侵。

这是 StackOverflow 上的普遍共识,还是我可能遗漏了任何方法?

于是我想到了:

  • 直接的 bcrypt 哈希和盐,但是这会导致出于各种原因与用户联系。
  • 密码重置。我可以保存恢复问题/答案,但当然答案需要可读,这样才能解决问题。
  • 另一点是他们忘记了那些安全问题或我在注册时生成的用户名。无法将它们关联到帐户。
  • 我还想到了限制重复用户的方法(假设我克服了上述问题)。如果我对搜索进行哈希/加盐搜索会非常“繁重”吗?我可以简单地保留一长串使用过的电子邮件,但问题再次将其链接到现有帐户?

很想听听你的想法。

谢谢。

【问题讨论】:

  • 我是否正确地认为您希望用户使用电子邮件/密码登录,然后您希望您的系统加密他们的所有个人信息以使其无法识别?
  • 您可以考虑使用 Sqrl 进行用户验证。 grc.com/sqrl/sqrl.htm 。系统使用公钥加密而不是密码来签署用户会话。您根据从客户端密码派生的密钥来识别用户。这样您就不必担心丢失密码。因为没有密码可以丢失。我还没有尝试过,但是从史蒂夫·吉布森的播客上听听,这似乎很不错。
  • @AaronFranco 是的,没错。
  • 我很想知道这个项目的进展如何? @userMod2
  • 借助现代科技,您或许可以通过区块链实现这一目标。

标签: node.js database security bcrypt database-security


【解决方案1】:

我认为您描述的场景是可能的。您可以在用户登录时给他们一个解密令牌。令牌可以分配给前端应用程序中的变量,因此如果他们离开站点或页面,令牌将丢失,他们将不得不重新登录。

使用令牌,应用可以解密来自服务器的加密数据。因此,所有数据都可以使用令牌加密。然后,如果需要更改密码,您可以在生成新密码时生成新令牌,并且您的服务器必须解密然后使用新令牌重新加密其所有数据。通过这种方式,您可以在使用 SSL 时加密所有服务器文件、代码和数据库,因此所有数据在到达用户显示之前都是匿名的。用户登录将是获取令牌以解密来自服务器的任何数据的唯一方法。这将大大降低服务器性能。

Atmel 在其微芯片中使用了这种技术,以实现从设备到云的 100% 加密。这对芯片来说是有意义的,因为用户不必在视觉上与它进行交互。在 webapp 的情况下,需要有某种方法来解密数据以供显示。这限制了可能性。

这里有几个链接可能对这样做有用: https://www.jamesward.com/2013/05/13/securing-single-page-apps-and-rest-services https://www.fourmilab.ch/javascrypt/javascrypt.html

这里是使用上述安全方法的 Atmel 芯片的链接。 http://www.atmel.com/products/security-ics/cryptoauthentication/

【讨论】:

  • 有趣 - 可以看到这是如何工作的,但是用户现在必须记住一个令牌 - 而不是他们的电子邮件/手机。我猜这个token可以做成一个简单的?
  • 用户永远看不到令牌。他们只使用电子邮件和密码,从您的服务器获取令牌。令牌将是服务器发送的唯一不会被加密的东西。
  • 嗯,好吧 - 但在服务器端/数据库上,仍然有从令牌到用户的链接吗?
  • 用户数据是完全加密的,因此令牌是对在客户端使用电子邮件/密码创建的初始哈希的模糊引用。发送该哈希将是检索令牌的唯一方法。
【解决方案2】:

首先,完全匿名的唯一方法是永远不要上网。没有什么,我的意思是什么,是完全安全的。任何哈希、加密、数据库等都可以被破解。如果一个恶意的“黑客”真的想要这些信息,无论你多么努力,他们都会想办法得到它。

话虽如此,您所描述的都是可能的,例如看 Tor、代理、VPN 等,如果您完全加密从用户那里获取的每一位信息,那么您就会陷入困境。但是,如果出现问题,这可能会成为一个问题,例如,假设您对所有哈希进行三重哈希,并对所有哈希进行多盐处理,并遇到需要解密用户信息的问题(为了争论,FBI 要求这样做)使用 MD5 加密的单个加盐哈希可能需要 2-5 小时才能解密/破解。您已经加密了所有信息,包括 IP、用户名、密码、电子邮件、姓名等,现在您可能需要一天以上的时间来解密单个用户。

但是,您可以执行以下操作:在您的浏览器中创建一条加密隧道,用户必须访问该隧道才能运行浏览器(有点像 VPN),然后从那里在浏览器 URL 中抛出代理到进一步的异常。这样,用户就处于具有不同 IP 的加密隧道中,并且使用的 IP 不是通过隧道提供的 IP。您甚至可以不时地跳 IP,并更换代理。

现在让我们开始保护数据库,我建议使用多盐化哈希,使用密码保护它们,并从数据库所在的计算机中删除密码。如果您需要访问哈希进行解密,这也可能会很麻烦。

我说去吧,最坏的情况是你会稍微追踪到用户。但是请记住,如果您成功创建了它,怀有恶意的人会尝试利用它,只是看看他们是否可以。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 2016-11-30
    • 2010-09-30
    • 2018-06-21
    • 2023-01-17
    相关资源
    最近更新 更多