Могут ли браузеры принудительно кэшировать HTML страниц? - PullRequest
0 голосов
/ 23 февраля 2020

Я женюсь и вместо печати приглашений на свадьбу я сделал веб-страницу. Один из моих друзей создал подпапку (/var/www/web/myname) на своем веб-сервере, и я загрузил свои файлы (HTML, CSS, JS) через S SH.

Это важно : У меня есть доступ только к этой папке, поэтому я не могу использовать любую базу данных и делать какие-либо изменения на стороне сервера! Мой единственный набор инструментов - это HTML директивы и клиентская часть JS.

Поскольку он опубликован c, его может увидеть каждый, но я этого не хочу. Вот почему я AES зашифровал код HTML моей страницы и сделал страницу входа. После ввода правильного пароля (его ha sh хранится в исходном файле JS) сценарий JS расшифровывает зашифрованную строку AES (которая также хранится в исходном файле JS), используя пароль в качестве и он изменяет фактическую страницу на теперь расшифрованный код HTML, вызывая document.open(), document.write() и document.close().

. Есть ли способ заставить браузер кэшировать фактическую 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();  
}

Я знаю, что это глупо вещь, пожалуйста, не суди меня. :)

1 Ответ

0 голосов
/ 23 февраля 2020

Существует несколько способов кэширования страницы, например, заголовки управления кэшем или работники службы. Тем не менее, кэширование страницы в целях аутентификации, как правило, не является правильным подходом. Вместо этого вы захотите сохранить какие-то токены аутентификации (JWT, сеансовые куки и т. Д. c) для дальнейшей повторной аутентификации.

https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie

// Once authenticated using password
document.cookie = 'someKey=someValue'

// For a returning use
function getCookie(name) {
  const cookies = document.cookie.split(';')
  return (cookies.reduce((t, c) => {
    const entry = c.split('=')
    t[entry[0]] = entry[1]
    return t
  }, {}))[name]
}

if (getCookie('someKey') === 'someValue') {
  // authenticated
}
...