如何在浏览器中放置敏感凭据,以便可以通过网页上的javascript访问它们,但不能通过服务器或其他网站访问?
我正在构建一个向用户显示AES加密消息的网站。通过API检索消息并将其存储在我的服务器上。用户可以登录并输入他的密钥以在浏览器中解密,如下所示:
$(document).on("submit", "#decryption_form", function(e) {
e.preventDefault();
var key = $("#key").val(); // The key is retrieved through a form input div
var iv = key.substring(32); // The initialization vector is a part of the key submitted by the user
var encrypted = $("#message").attr("encrypted"); // The encrypted message that was fetched from the server was added as an attribute to a div
var decrypted = CryptoJS.AES.decrypt(encrypted, key, { iv: iv }); // The message is decrypted
$("#message").html(decrypted); // The decrypted message is displayed to the user
});
我注意到ProtonMail - 一个零知识电子邮件提供商,他将您的PGP密钥对放在浏览器中以使用您的凭据进行解密 - 即使您刷新网页或复制/粘贴,也可以保留敏感凭据URL到同一浏览器选项卡中(但如果将URL粘贴到新选项卡中则不会)。他们的源代码是open source,但对我来说太复杂了。
这让我觉得我必须能够以某种方式保护敏感凭据,甚至为在我的网页之间在同一浏览器标签中导航的用户保留数据(无需通过我的服务器发送)。
This post讨论了这个主题,但没有规范/具体的答案。还有this 3 year old post,但评论主要是为什么OP需要在浏览器中存储传感数据。
答案 0 :(得分:3)
网络存储空间(spec,MDN)是特定于来源的。如果我的源存储数据,那么你的数据就无法从那里读取(模数浏览器错误)。
Cookie也是特定于站点的(并且可以是特定于路径的),但Cookie会通过网络传输,并且现在网络存储得到非常好的支持(并且使用更好,更好的API),这是不可能的为这样的事情使用cookies的原因,至少有两个非常好的理由不这样做。
请注意,没有什么能阻止最终用户通过浏览器的内置开发工具查看网络存储或Cookie中的内容。但是正如你所说的那样,有关的密钥是用户自己的密钥,大概只有有人能够访问他们的机器才会出现问题...
答案 1 :(得分:0)
用户可以通过调试工具或其他方式访问存储在cookie,会话,本地存储中的数据。
您可以选择强加密,但难以解密(但在某些情况下可能): - )