【发布时间】:2020-06-07 12:45:51
【问题描述】:
我要结婚了,我没有打印结婚请柬,而是制作了一个网页。我的一个朋友在他的网络服务器上创建了一个子文件夹(/var/www/web/myname),我通过 SSH 上传了我的文件(HTML、CSS、JS)。
重要的是:我只能访问该文件夹,因此我不能使用任何数据库并进行任何服务器端修改!我唯一的工具集是 HTML 指令和客户端 JS。
由于它是公开的,任何人都可以看到它,但我不希望这样。这就是为什么我使用 AES 加密我的页面的 HTML 代码并制作了一个登录页面。输入有效密码(其哈希存储在 JS 源文件中)后,JS 脚本使用密码作为密钥解密 AES 加密字符串(也存储在 JS 源文件中),并将实际页面更改为现在通过调用 document.open()、document.write() 和 document.close() 来解密 HTML 代码。
有没有办法强制浏览器缓存实际的 HTML 代码,以避免每次打开页面时都重新输入密码?
你们中的一些人请求了 JS“登录”代码:
var hashString = "sha256_hash_of_the_password";
var indexPage = "aes_enrypted_string_of_base64_coded_html"; // The original one is quite long...
document.getElementById("password-box").addEventListener("keyup", function(event) {
event.preventDefault();
document.getElementById("password-box").classList.remove("pw-bad");
if (event.keyCode === 13) {
document.getElementById("login-button").click();
}
});
function buttonListener()
{
var password = document.getElementById("password-box").value;
if(password !== "") {
if(CryptoJS.SHA256(password) == hashString.toLowerCase()) {
var indexDecrypt = CryptoJS.AES.decrypt(indexPage, password).toString(CryptoJS.enc.Utf8);
var parsedWordArray = CryptoJS.enc.Base64.parse(indexDecrypt);
var parsedStr = parsedWordArray.toString(CryptoJS.enc.Utf8);
document.open('text/html');
document.write(parsedStr);
document.close();
return;
}
document.getElementById("password-box").value = "";
document.getElementById("password-box").classList.add("pw-bad");
}
document.getElementById("password-box").focus();
}
我知道这是一件愚蠢的事情,请不要评判我。 :)
【问题讨论】:
-
请贴出你的JavaScript相关代码sn-ps。
-
您可以使用 cookie 或 localStorage 将密码存储在本地。
-
有更好/标准的方法来登录/验证用户,而无需加密代码
-
@LawrenceCherone 我知道,但我无法访问网络服务器本身(数据库等),所以我只能使用静态 HTML 页面。
-
什么阻止了某人通过开发工具简单地添加,符合 if 语句,然后在解密中用
hashString.toLowerCase()替换password.. 只是说
标签: javascript html web caching