javascript – 查询服务器是否存在记录,而服务器不知道正在查询的记录
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 查询服务器是否存在记录,而服务器不知道正在查询的记录,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2007字,纯文字阅读大概需要3分钟。
内容图文
![javascript – 查询服务器是否存在记录,而服务器不知道正在查询的记录](/upload/InfoBanner/zyjiaocheng/769/1e487221e96445cc8bf30b4d00d7b88f.jpg)
我一直在考虑pwnedlist.com和shouldichangemypassword.com等服务以及它们的基本问题 – 信任.
也就是说,用户必须相信这些服务不会收集提交的查询.
Pwnedlist.com提供了提交用户查询的SHA-512哈希的选项,这是向前迈出的一步,但如果查询确实存在于数据库中,则仍然会泄漏信息.也就是说,恶意服务会知道给定的电子邮件地址是有效的(另请参阅:为什么您不应该单击垃圾邮件中的取消订阅链接).
我想出的解决方案如下:
1)而不是用户自己计算和提交哈希,哈希(我将在我的例子中使用更简单的md5)通过客户端javascript计算:
md5("user@example.com") = "b58996c504c5638798eb6b511e6f49af"
2)现在,不是将整个散列作为查询发送到服务器,而是仅传输前N位:
GET http://remotesite.com?query=b58996
3)服务器响应其数据库中存在的所有哈希值,这些哈希值以相同的N位开头:
{
"b58996afe904bc7a211598ff2a9200fe",
"b58996c504c5638798eb6b511e6f49af",
"b58996443fab32c087632f8992af1ecc",
...etc... }
4)客户端javascript比较服务器返回的哈希列表,并通知用户她的电子邮件地址是否存在于DB中.
由于服务器响应中存在“b58996c504c5638798eb6b511e6f49af”,因此电子邮件存在于数据库中 – 通知用户!
现在,这个解决方案的明显问题是用户必须信任客户端javascript,才能传输它要传输的内容.然而,足够知识渊博的个人将能够验证查询未被泄露(通过观察发送到服务器的查询).它不是一个完美的解决方案,但如果用户可以(理论上)验证网站的功能,它会增加信任度.
SO如何看待这个解决方案?重要的是,有没有人知道任何现有的例子或对这种技术的讨论?
注意:pwnedlist.com和shouldichangemypassword.com显然都是由信誉良好的人/组织运营,我没有理由不相信.这更像是一次思考练习.
解决方法:
像pwnedlist.com这样的服务正在处理公共信息.根据定义,每个人都可以访问这些数据,因此尝试保护它是一个没有实际意义的问题.攻击者只需从The Pirate Bay下载它.
但是,使用像这样的哈希函数仍然很容易打破,因为它没有保证,缺乏关键的直线.在所有现实中,像sha-512这样的消息摘要功能并不适合这项工作.
使用Bloom Filter可以获得更好的效果.这使您可以创建泄露数据的黑名单,而无需获取纯文本.这是因为基于排列的蛮力可能发现碰撞而不是真正的纯文本.查找和插入一个很酷的O(1)复杂性,并且它自己占用的表空间要少得多,可能是使用传统sql数据库的空间的1 / 10,000,但是这个值是可变的,具体取决于你指定的错误率.
内容总结
以上是互联网集市为您收集整理的javascript – 查询服务器是否存在记录,而服务器不知道正在查询的记录全部内容,希望文章能够帮你解决javascript – 查询服务器是否存在记录,而服务器不知道正在查询的记录所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。