我如何确保网站用户的隐私和匿名性?🤔
在过去的一个月里,我建立了FelloWage的第一个版本——一个允许用户分享他们的薪资信息并查看其他人分享的信息的网站。
当然,我希望用户的信息保持私密和匿名。当有人查看工资记录时,他们不应该知道这条记录是谁的。
另一方面,为了保持共享数据的质量,用户应该能够在工资记录随时间变化时进行更新。因此,工资记录需要以某种方式与相应的用户账户关联。
这就带来了一个问题:如果我以最显而易见的方式(数据库外键关系)来实现它,那么网站运营者(我)实际上就能够访问用户账户和工资记录之间的这种关联。此外,持有法院命令的执法部门也能够看到这些信息,如果不幸的网络攻击得逞,黑客也会获取这些数据。
这还不够好!我们该如何改进?
我们正在寻找一种解决方案:
- 工资条目可供系统所有用户读取,
- 工资条目和用户帐户之间的联系只能由拥有该条目的用户帐户读取,
- 为了登录系统的目的,用户帐户可供系统读取(至少部分读取)。
在我的场景中,由于用户注册验证是一个手动过程,我需要系统能够在没有用户的情况下写入此连接。
如果我们总结一下:只有用户应该能够读取连接记录,而系统应该能够写入该记录(但不能读取它)。
非对称加密
在我看来,这听起来像是非对称加密,系统知道用户的公钥,用户也知道自己的私钥。系统在需要写入信息时使用公钥加密,用户则可以使用私钥读取信息。
当然,下一个挑战是用户体验。我们不能让用户每次登录都输入私钥。
那样就太笨重了。
密码加密的私钥
然后我突然想到:如果我做和使用密码设置 SSH 密钥时相同的操作会怎么样?
现在系统将存储两种类型的密钥:
- 公钥,以及
- 使用用户密码加密的私钥。
现在,即使我在数据库控制台中输入原始 SQL,我也再也无法知道哪些工资条目的所有者是谁了!而且用户仍然可以查看和管理自己的条目。
另外一个好处是,我发现这种保护用户数据的方法非常方便,而且我也将它用于其他信息,我确信只有用户才需要访问这些数据。
当然,我们仍然需要确保用户创建的密码足够强,不容易受到字典攻击,并且不会成为任何违规行为的一部分。为此,我使用了Dropbox 库的 zxcvn和“Have I Been Pwned” API 。
感谢您的阅读!
很高兴你读完了这篇文章!如果你想了解更多类似的幕后花絮,不妨订阅我们的新闻通讯。
我们正在撰写的下一篇文章将深入探讨本文解决方案的实现细节和挑战。不要错过,点击此处订阅我们的新闻通讯!🚀
谢谢您的支持!
文章来源:https://dev.to/foundsiders/how-have-i-ensured-the-privacy-and-anonymity-of-my-website-users-5fgb