Уникальный идентификатор идентификатора веб-браузера для входа в веб-панель управления в Perl

У веб-браузеров есть уникальный идентификатор, который можно передать на скрипты Perl? (Например, уникальные серийные продукты, которые вы покупаете в магазине)

Например: если я устанавливаю веб-браузер, может ли этот веб-браузер предоставить уникальный идентификационный идентификатор для PHP или Perl script?

Причина, по которой я ищу что-то уникальное, заключается в следующем:

  • У меня есть пользовательская база данных с именами пользователей и паролями.

  • Имена пользователей/пароли зашифровываются и устанавливаются как файлы cookie для веб-браузеров пользователей, чтобы пользователи могли войти в мое веб-приложение и выйти из него. (Каждая веб-страница, загруженная при входе в систему, просматривает файлы cookie и предоставляет доступ, если пользователь/пропуск cookie правильно)

  • Если хакеру удается украсть зашифрованное имя пользователя и парольный файл cookie у пользователя, он сможет войти в систему с помощью этих украденных зашифрованных данных.

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

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


Использование IP-адресов - это возможное решение, но это плохое решение, потому что многие, если не большинство ISP, назначают динамические IP-адреса для интернет-подключений своих клиентов.

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


У кого-нибудь есть какие-либо решения для вышеупомянутого сценария?

Я искал способ получить что-то уникальное из браузеров, но это не представляется возможным. Это возможно или нет?

Ответ 1

Браузеры не имеют уникального идентификатора, но возможен хороший уровень снятия отпечатков пальцев. EFF измерил, что в лучшем случае информация, отправляемая браузерами (включая строку пользовательского агента и другие заголовки HTTP), представляет 18,1 бит энтропии, что означает, что если вы выберете два браузера случайным образом, у вас есть 1 шанс из 2 18.1 (≈280 000), что у них будут одинаковые "отпечатки пальцев". Они создали веб-сайт, на котором вы можете оценить степень энтропии информации, отправленной вашим браузером.

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

С другой стороны, вся эта информация полностью подделана: если кто-то может провести атаку "человек посередине" и украсть cookie, он также может украсть все заголовки, отправленные браузером, и может использовать их повторно. аутентифицировать себя на вашем сайте. То же самое было бы верно, если бы браузеры действительно имели уникальные идентификаторы.

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

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

Если вам нужна еще более высокая степень защиты, один из вариантов - изменять идентификатор сеанса каждый раз, когда пользователь отправляет HTTP-запрос. Вы также можете сохранить список IP-адресов, которые каждый пользователь использует для подключения к вашему веб-сайту, или маски IP-адресов (например, X.Y.*.*), если он меняется слишком часто, и позволить им аутентифицировать себя, если они подключаются из необычного места. Если вы сделаете это, хорошей практикой будет спросить их: "Будете ли вы снова соединяться с этого места?"

Ответ 2

Нет, у браузеров нет уникального идентификатора. Такого нет. Если бы это было так, это была бы мечта онлайн-рекламы!

Тем не менее, если вы обслуживаете свой сайт через HTTPS, вы можете оформить своих клиентов с сертификатами X.509 на стороне клиента. Они были бы криптографически подписаны вашей организацией, настолько неприступными. (Хотя, очевидно, если кто-то имел доступ к вашему клиентскому компьютеру, они могли бы сделать его копию - то же самое было бы верно для любого идентификационного номера браузера!) После того, как сертификат установлен, каждый раз, когда браузер делает HTTPS-запрос на ваш сайт, ваш веб-сайт может запросить его сертификат, и это можно использовать для проверки идентификации пользователя.

Ответ 3

Вы можете хранить уникальные значения (например: идентификатор пользователя) в пользовательском браузере, используя " Html Local Storage " на постоянной основе без даты истечения срока действия, и сохранять те же значения с информацией об пользовательском агенте в db.

Затем вы передаете информацию агента пользователя с данными в локальном хранилище и сопоставляете их с данными в базе данных...

// store
localStorage.setItem("myValue", "123-abcd");

// retrieve
var myValue = localStorage.getItem("myValue");

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

Существует также "Хранилище сеансов HTML" для хранения данных в браузере пользователей только для одного сеанса.