Парольний захист статичної HTML-сторінки на JS
Зазвичай парольний захист здійснюється через веб-сервер, який.htaccess
перевіряє пароль і видає контент. та Portable Secret. Для шифрування HTML перед публікацією StatiCrypt використовує AES-256 та WebCrypto, а розшифровка відбувається за допомогою введення пароля в браузері на стороні клієнта, як показано в демо (пароль test ).htpasswd
Сторінка буде розшифрована у браузері відвідувача, коли той запровадить відомий йому пароль. В принципі, цю систему можна використовувати для шифрування особистих нотаток, якщо ви хочете викласти їх на загальнодоступний сервер, щоб завжди мати доступ до них, але при цьому надійно захистити від сторонніх очей.
Розшифровка відбувається на звичайному JavaScript, тобто з боку клієнта не потрібно завантажувати та встановити додаткові інструменти, крім стандартного браузера. Ні хостинг-провайдер, ні інтернет-провайдер не отримують доступу до цієї інформації в процесі розшифровки її розширювання в браузері.
Перевірити шифрування можна на веб-версії StatiCrypt . Зверху поля для вихідного HTML та пароля:
Знизу – результат із зашифрованим HTML:
Консольна утиліта StatiCrypt доступна для скачування на Github , а також у вигляді пакета NPM . У консольній програмі налаштування інтерфейсу для поля введення пароля здійснюється зміною шаблону lib/password_template.html
в комплекті утиліти із зазначенням потім шляху до шаблону через прапор -t path/to/my/file.html
. Важливо лише не змінювати фрагмент шифрування у цьому шаблоні, у тому числі формат змінних /*[|variable|]*/0
із обов’язковим нулем на кінці.
Існує готовий шаблон для створення та хостингу односторінкового зашифрованого сайту на GitHub Pages.
За замовчуванням поле введення пароля містить прапорець “Запам’ятати мене” (Remember me). У цьому випадку пароль зберігається в localStorage (в хешованому вигляді з сіллю). Знову ж таки за замовчуванням немає терміну зберігання пароля. Для вимкнення цієї опції при генерації сторінки з консолі можна використовувати прапор --remember false
. Термін зберігання днями вказує опція --remember NUMBER_OF_DAYS
.
Сторінка шифрується за допомогою AES-256 у режимі CBC, який у контексті StatiCrypt позбавлений характерних для нього вразливостей. Пароль хешується за допомогою функції PBKDF2: 599 тис. операцій хешування SHA-256 і 1000 операцій SHA-1 ( для легаси ), що становить рекомендоване значення 600 тис. операцій.
По суті, генерується нова веб-сторінка (зашифрована), яка містить вміст старої.
Для найкращої безпеки рекомендується використовувати паролі довжиною понад 16 символів (літери, цифри, спецсимволи) та менеджер паролів. Наприклад, опенсорсний Bitwarden. Хоча AES-256 вважається надійним сучасним шифром, але для кращого захисту від брутфорсу краще використовувати паролі якомога більшої довжини.
Утиліта також вміє генерувати посилання, яке вже містить пароль, що хешує, для доступу до сторінки без введення пароля безпосередньо у веб-формі браузера. Таке посилання можна передавати довіреним особам або використовувати самому, а контент при цьому зберігається на сервері у зашифрованому вигляді, недоступному для перегляду ні хостером, ні третіми особами.
Схожий проект, але для шифрування файлів – Portable Secret . Його можна використовувати для шифрування конфіденційних файлів, які зберігаються в небезпечному місці: на USB-флешці, хмарному хостингу, на веб-сайті тощо. буд. А також для шифрування файлів перед відправкою по відкритому каналу: поштою або месенджером. В принципі це сучасна зручна альтернатива PGP. Є веб-демо для шифрування у браузері (в офлайні).