Javascript 可以强制浏览器缓存HTML页面吗?
我要结婚了,我没有打印结婚请柬,而是制作了一个网页。我的一个朋友在他的web服务器上创建了一个子文件夹(Javascript 可以强制浏览器缓存HTML页面吗?,javascript,html,web,caching,Javascript,Html,Web,Caching,我要结婚了,我没有打印结婚请柬,而是制作了一个网页。我的一个朋友在他的web服务器上创建了一个子文件夹(/var/www/web/myname),我通过SSH上传了我的文件(HTML、CSS、JS) 这一点很重要:我只能访问该文件夹,因此我不能使用任何数据库和进行任何服务器端修改!我唯一的工具集是HTML指令和客户端JS 因为它是公开的,任何人都能看到,但我不想看到。这就是为什么我加密了我页面的HTML代码,并创建了一个登录页面。输入有效密码(其散列存储在JS源文件中)后,JS脚本使用密码作为密
/var/www/web/myname
),我通过SSH上传了我的文件(HTML、CSS、JS)
这一点很重要:我只能访问该文件夹,因此我不能使用任何数据库和进行任何服务器端修改!我唯一的工具集是HTML指令和客户端JS
因为它是公开的,任何人都能看到,但我不想看到。这就是为什么我加密了我页面的HTML代码,并创建了一个登录页面。输入有效密码(其散列存储在JS源文件中)后,JS脚本使用密码作为密钥解密AES加密字符串(也存储在JS源文件中),并通过调用document.open()
,document.write()
,将实际页面更改为现在解密的HTML代码,和document.close()
有没有办法强制浏览器缓存实际的HTML代码,以避免每次打开页面时重新键入密码
你们中的一些人请求了JS“登录”代码:
我知道这是一件愚蠢的事情,请不要评判我。:) 例如,有几种方法可以缓存页面、缓存控制头或服务工作者。也就是说,缓存页面以进行身份验证通常不是正确的方法。相反,您可能希望保存某种身份验证令牌(JWT、会话cookie等),以便进行进一步的重新身份验证
//使用密码进行身份验证后
document.cookie='someKey=someValue'
//归还
函数getCookie(名称){
常量cookies=document.cookie.split(“;”)
返回(cookies.reduce)(t,c)=>{
常量项=c.split('='))
t[条目[0]]=条目[1]
返回t
},{})[姓名]
}
如果(getCookie('someKey')=='someValue'){
//认证
}
请发布JavaScript的相关代码片段。您可以使用cookie或localStorage在本地存储密码。有更好的/标准的方法登录/验证用户,而无需加密密码code@LawrenceCherone我知道,但我无法访问web服务器本身(数据库等),因此,我只能使用静态HTML页面。什么是阻止某人通过开发工具简单地添加,对if语句执行true,然后在decrypt中将password
替换为hashString.toLowerCase()
。。只是saying@prodx这里的安全性可以很容易地绕过,如果您的需求非常基本,我建议您保持简单,使用cookie
保存/标记您需要的内容,而此链接可能会回答问题,最好在这里包括答案的基本部分,并提供链接供参考。如果链接页面发生更改,则仅链接的答案可能无效-
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();
}