Javascript 如何在无服务器环境中对文件(html)进行密码保护?
是否可以在不使用.htaccess、php或localhost的情况下对文件进行密码保护。可能使用某种加密或其他方法。不。好吧,不是任何提供远程安全的东西。您可以在javascript中隐藏密码,可能编码为base64,然后将输入字段的值与存储的base64代码进行比较,但是任何了解view source或javascript的人都可以轻松绕过这一点Javascript 如何在无服务器环境中对文件(html)进行密码保护?,javascript,html,Javascript,Html,是否可以在不使用.htaccess、php或localhost的情况下对文件进行密码保护。可能使用某种加密或其他方法。不。好吧,不是任何提供远程安全的东西。您可以在javascript中隐藏密码,可能编码为base64,然后将输入字段的值与存储的base64代码进行比较,但是任何了解view source或javascript的人都可以轻松绕过这一点 密码验证和其他敏感信息必须在服务器端处理,用户无法访问它 没有。好吧,没有提供任何远程安全的东西。您可以在javascript中隐藏密码,可能编码
密码验证和其他敏感信息必须在服务器端处理,用户无法访问它 没有。好吧,没有提供任何远程安全的东西。您可以在javascript中隐藏密码,可能编码为base64,然后将输入字段的值与存储的base64代码进行比较,但是任何了解view source或javascript的人都可以轻松绕过这一点
密码验证和其他敏感信息必须在服务器端处理,用户无法访问它 是的,多亏了。 甚至还有一个 所以,是的,您最终可以将任何您想要的数据编码为pgp消息,然后需要密码来解密并使用它 如果您需要加密您的邮件: 异步函数{ const cleartext='alertan无用消息'; const msg=openpgp.message.fromTextcleartext; const ciphertext=等待openpgp.encrypt{ 讯息:msg,, 密码:[mypassword], 盔甲:真的 }; //不过,您最好保存为文本文件, //ECNOD和新行字符很重要 console.logciphertext.data; } .catchconsole.error;
是的,您可以实现相当不错的前端加密,这要归功于。 甚至还有一个 所以,是的,您最终可以将任何您想要的数据编码为pgp消息,然后需要密码来解密并使用它 如果您需要加密您的邮件: 异步函数{ const cleartext='alertan无用消息'; const msg=openpgp.message.fromTextcleartext; const ciphertext=等待openpgp.encrypt{ 讯息:msg,, 密码:[mypassword], 盔甲:真的 }; //不过,您最好保存为文本文件, //ECNOD和新行字符很重要 console.logciphertext.data; } .catchconsole.error;
受@kaido的启发,我开发了一个JavaScript书签。因此,将其作为新书签添加到浏览器中,然后单击它以加密当前页面。系统将要求您插入密码并选择保存加密HTML页面的位置
javascript:(function (doc) {
var password = prompt('Enter a password to encrypt this page'),
js = doc.createElement('script');
js.onload = function () {
/* Get current page HTML and use a dirty workaround to convert relative paths to full URLs */
var page = doc.documentElement.cloneNode(true);
for (var attr of ['src', 'href']) {
page.querySelectorAll('[' + attr + ']').forEach(function (node) {
node[attr] = node[attr];
});
}
/* All the magic belongs to openpgpjs.org */
openpgp.encrypt({
message: openpgp.message.fromText(page.outerHTML),
passwords: [password]
}).then(function (ciphertext) {
var link = doc.createElement('a'),
html = [
'<!DOCTYPE html>',
'<head>',
' <meta charset="utf-8" />',
'</head>',
'<body>',
' <textarea id="encryptedMessage" style="display:none">' + ciphertext.data + '</textarea>',
' <script src="' + js.src + '"></script>',
' <script>',
' var field=document.getElementById("encryptedMessage");',
' openpgp.message.readArmored(field.value).then(function(message){',
' var decrypter=openpgp.decrypt({message:message,passwords:[prompt("Enter the password to decrypt this page")]});',
' decrypter.then(function(plaintext){document.documentElement.innerHTML=plaintext.data});',
' decrypter.catch(function(e){alert(String(e))});',
' });',
' </script>',
'</body>'
].join('\n');
doc.body.appendChild(link);
link.download = 'protected.html';
link.href = 'data:text/html;,' + encodeURIComponent(html);
link.click();
doc.body.removeChild(link);
});
};
/* This will fail if Content Security Policy prohibits embedded scripts */
js.src = 'https://cdnjs.cloudflare.com/ajax/libs/openpgp/4.3.0/compat/openpgp.min.js';
doc.body.appendChild(js);
})(document);
这里可以找到一个加密页面的例子:受@kaido的启发,我开发了一个JavaScript Bookmarklet。因此,将其作为新书签添加到浏览器中,然后单击它以加密当前页面。系统将要求您插入密码并选择保存加密HTML页面的位置
javascript:(function (doc) {
var password = prompt('Enter a password to encrypt this page'),
js = doc.createElement('script');
js.onload = function () {
/* Get current page HTML and use a dirty workaround to convert relative paths to full URLs */
var page = doc.documentElement.cloneNode(true);
for (var attr of ['src', 'href']) {
page.querySelectorAll('[' + attr + ']').forEach(function (node) {
node[attr] = node[attr];
});
}
/* All the magic belongs to openpgpjs.org */
openpgp.encrypt({
message: openpgp.message.fromText(page.outerHTML),
passwords: [password]
}).then(function (ciphertext) {
var link = doc.createElement('a'),
html = [
'<!DOCTYPE html>',
'<head>',
' <meta charset="utf-8" />',
'</head>',
'<body>',
' <textarea id="encryptedMessage" style="display:none">' + ciphertext.data + '</textarea>',
' <script src="' + js.src + '"></script>',
' <script>',
' var field=document.getElementById("encryptedMessage");',
' openpgp.message.readArmored(field.value).then(function(message){',
' var decrypter=openpgp.decrypt({message:message,passwords:[prompt("Enter the password to decrypt this page")]});',
' decrypter.then(function(plaintext){document.documentElement.innerHTML=plaintext.data});',
' decrypter.catch(function(e){alert(String(e))});',
' });',
' </script>',
'</body>'
].join('\n');
doc.body.appendChild(link);
link.download = 'protected.html';
link.href = 'data:text/html;,' + encodeURIComponent(html);
link.click();
doc.body.removeChild(link);
});
};
/* This will fail if Content Security Policy prohibits embedded scripts */
js.src = 'https://cdnjs.cloudflare.com/ajax/libs/openpgp/4.3.0/compat/openpgp.min.js';
doc.body.appendChild(js);
})(document);
这里可以找到一个加密页面的示例:是的,您可以只使用JS加密任何消息,而不使用后端,也不使用JS代码中的存储密码。我将描述没有技术细节的简单理论方法: 加密: 创建密码,但不要将其存储在任何位置 从该密码生成长而复杂的散列,例如相同的密码应始终生成相同的散列,而不是将其存储在任何地方; 使用该散列作为密钥,例如对消息进行编码。 解密: 要求用户键入密码 以与加密相同的方式从该密码生成哈希 在对称密钥算法中将该散列用作密钥来解码消息。
正如您所见,在这种方法中,您不需要在任何地方存储密码。是的,您可以只使用JS加密任何消息,而不使用后端,也不需要在JS代码中存储密码。我将描述没有技术细节的简单理论方法: 加密: 创建密码,但不要将其存储在任何位置 从该密码生成长而复杂的散列,例如相同的密码应始终生成相同的散列,而不是将其存储在任何地方; 使用该散列作为密钥,例如对消息进行编码。 解密: 要求用户键入密码 以与加密相同的方式从该密码生成哈希 在对称密钥算法中将该散列用作密钥来解码消息。
正如您所见,这种方法不需要在任何地方存储密码。在无服务器环境中,文件是完全安全的。。。因为没有任何东西可以将其内容发送到任何地方,除非通过巫术或Majicks。您是否介意在您试图保护的对象周围添加更多的上下文,以及如何首先分发密码?在无服务器环境中,该文件是完全安全的。。。因为没有任何东西可以将其内容发送到任何地方,也许除了通过巫术或Majicks,您是否介意在您试图保护的对象以及如何分发密码i周围添加更多的上下文
n首先?如果您试图保护存储在桌面操作系统上的文件,您可以使用外部软件或Windows 10的BitLocker.processed在服务器端加密该文件-在无服务器环境中是哪一方?确切地说。也许我应该用一个词来表达server@Jay如何解密此页:?:脚本如何访问私钥?如果您试图保护存储在桌面操作系统上的文件,您可以使用外部软件或Windows 10的BitLocker.processed在服务器端加密该文件-在无服务器环境中是哪一侧?确切地说。也许我应该用一个词来表达server@Jay如何解密此页:?:脚本如何访问私钥?