Есть ли способ защитить паролем HTML-страницы без использования языка на стороне сервера? - PullRequest
1 голос
/ 13 января 2009

У меня есть ряд связанных веб-страниц, и я хочу ограничить доступ к этим страницам, попросив пользователя предоставить логин и пароль. Однако моя учетная запись хостинга в настоящее время не предоставляет никаких средств для создания сценариев на стороне сервера. Можно ли как-то решить эту задачу, используя только сценарии на стороне клиента?

Мне было интересно, как работает следующая программа -

http://www.myzips.com/software/HTML-Password.phtml

Разъяснение: спасибо за ваш вклад. Однако, если я настраиваю веб-сервер, есть ли возможность ввода пользователем имени пользователя и пароля?

Ответы [ 10 ]

10 голосов
/ 13 января 2009

Нет способа создать безопасный клиентский скрипт. Если у пользователя есть к нему доступ, это небезопасно.

Если на вашем хосте работает Apache, вы можете защитить папки с помощью .htaccess, в IIS вы можете сделать то же самое с помощью безопасности каталогов.

5 голосов
/ 13 января 2009

Вы можете создать файл .htaccess с чем-то вроде этого:

AuthUserFile path/to/password.txt
AuthGroupFile /dev/null
AuthName "Acces Restreint"
AuthType Basic
<Limit GET POST>
require valid-user
</Limit>

Затем вам нужно создать файл паролей

3 голосов
/ 13 января 2009

Это возможно реализовать, хотя вам, вероятно, будет проще переключиться на другого хостинг-провайдера. Вот как это возможно:

Сначала зашифруйте все тело с помощью симметричного алгоритма шифрования и случайного ключа (мастер-ключ). Сохраните этот зашифрованный текст в блоке JavaScript как текст.

Для всех ваших пользователей создайте хэш javascript, отображающий их имя пользователя в зашифрованную копию главного ключа (зашифрованного каждым ключом пользователя).

Наконец, создайте веб-страницу с запросом имени пользователя и пароля. Как только они введены, используйте имя пользователя, чтобы найти зашифрованный главный ключ. Расшифруйте его с помощью пароля, введенного пользователем, и используйте полученный главный ключ, чтобы разблокировать исходное тело. Используйте javascript для замены существующего HTML-тела расшифрованным.

0 голосов
/ 24 июня 2015

Ниже приведено рабочее решение этой проблемы , которое я реализовал сам.

Несколько пользователей здесь предложили использовать основанный на шифровании подход к защите паролем на стороне клиента. Мне тоже нужна была эта функциональность, поэтому я реализовал ее сам. Пароль хэшируется с использованием PBKDF2, а затем используется для шифрования страницы с помощью AES256.

Инструмент размещен здесь:

https://www.maxlaumeister.com/code/clientside-html-password/

с исходным кодом, доступным здесь:

https://github.com/MaxLaumeister/clientside-html-password


Описание проекта, со страницы проекта:

Защита паролем HTML на стороне клиента

Этот инструмент позволяет надежно защитить паролем HTML-файл. В отличие от других инструментов защиты паролем, этот инструмент:

  1. Не имеет серверных компонентов (этот инструмент и его страницы, защищенные паролем, полностью работают в javascript).

  2. Использует надежное шифрование, поэтому защиту паролем нельзя обойти.

Все, что вам нужно сделать, это выбрать файл HTML и пароль, и ваша страница будет защищена паролем.

0 голосов
/ 13 января 2009

Для этого вам не нужен открытый ключ - фактически дешифрование открытого ключа на практике ограничивается шифрованием других симметричных ключей и сертификатов, потому что это вычислительно очень дорого. Вам просто нужен общий секрет.

Шифрование веб-страниц с использованием AES (например), используя ключ, полученный из ключевой фразы (путем хеширования). Затем вам необходимо безопасно передать парольную фразу пользователю (-ям) и написать некоторый javascript для загрузки зашифрованного контента, запросить парольную фразу, расшифровать данные и включить их в DOM.

Все это довольно грязно и очень хрупко - только один пароль для всех пользователей, как только он скомпрометирован, вы должны заменить содержимое на сервере и надеяться, что Google не кеширует его ... Предложите перейти к настоящий провайдер

Что касается программы паролей HTML, на которую вы ссылаетесь, то нет способа узнать, не является ли она змеиной или сломанной ... Фраза «лучшая защита с помощью надежных алгоритмов» не совсем обнадеживает!

0 голосов
/ 13 января 2009

Или вы можете использовать загадочное html-имя файла в качестве пароля и ajax в / перейти к этой странице, если она существует: -)

Такой же безопасный (или незащищенный), как и другие предложения, но, вероятно, его легче реализовать.

0 голосов
/ 13 января 2009

Да, это возможно, но это не очень красиво или даже очень хорошо.

  • На вашей индексной странице есть пустой элемент div, куда будет помещен ваш ограниченный контент.
  • При загрузке страницы или нажатии на ссылку, запрос (window.prompt) запрашивает ваш пароль.
  • Ваш пароль хэшируется и сравнивается с сохраненным хэшем (или массивом хэшей) правильного пароля в вашем скрипте.
  • Если у вас есть совпадение, вы загружаете контент в div через AJAX
  • Вы можете сохранить пароль в файле cookie, чтобы он не запрашивался каждый раз (не очень безопасно, но тогда это не очень безопасная система)
  • Вы все еще не настолько безопасны, потому что имена файлов страниц, которые вы загружаете, будут видны в вашем скрипте, но это может удержать очень случайного пользователя.
  • Вы можете запутать URL-адреса, что потребует некоторых знаний JavaScript для просмотра. например, рот13

Вам понадобится скрипт хеширования JavaScript

0 голосов
/ 13 января 2009

Конечно, если безопасность не имеет большого значения. По сути, вы будете открывать дверь с надписью «Пожалуйста, не входите, если вы не знаете пароль». Все, что не использует серверную технологию, вероятно, использует JavaScript вместе с файлом в защищенном каталоге для хранения паролей. Однако это не защита паролем. JavaScript может быть отключен, что приведет к загрузке страницы. Без сомнения, этому будет противостоять сокрытие контента ... но контент все равно будет доступен для просмотра через источник. Есть несколько других способов, но если у вас есть контент, который действительно стоит защитить паролем, это не лучший способ.

0 голосов
/ 13 января 2009

Если бы для ВСЕХ был один и только один пароль, вы могли бы попробовать подход с открытым ключом. Вы можете предоставить простой сценарий для выполнения расшифровки RSA (вам нужно будет выполнить оригинальное шифрование где-нибудь, где у вас есть доступ к некоторому программному обеспечению). Затем вы можете предоставить содержимое в виде зашифрованной строки. Вы бы отобразили поле пароля, пользователь наберет пароль, затем строка будет расшифрована в соответствии с паролем. Если пароль правильный, строка будет расшифрована правильно, и страница отобразится. В противном случае страница будет выглядеть как куча мусора. Однако будьте осторожны, потому что этот метод на стороне клиента будет очень уязвим для грубой силы.

0 голосов
/ 13 января 2009

Я не знаю о клиентских скриптах, но вы можете использовать веб-сервер для ограничения доступа к вашему сайту.
В IIS вы можете использовать настройки вкладки «Безопасность каталога»: настроить аутентификацию веб-сайта IIS

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...