Если на экране входа пользователь отправляет форму со своим именем пользователя и паролем, пароль отправляется в виде обычного текста (даже с сообщением, исправьте меня, если я ошибаюсь).
Итак, вопрос в том, как правильно защитить пользователя и его пароль от третьей стороны, которая может подслушивать данные связи?
Я знаю, что HTTPS является решением проблемы, но есть ли способ обеспечить хотя бы некоторый уровень безопасности с помощью стандартного HTTP протокол (POST запрос)? (возможно, используя javascript каким-то образом)
редактировать Возможно, я упустил кое-что важное.
автор: Shoban
8 ответов
использование HTTP с SSL сделает вашу жизнь намного проще, и вы можете спокойно отдыхать очень умные люди (умнее меня, по крайней мере!) изучали этот метод конфиденциальной связи в течение многих лет.
автор: Jeremy Powell
сертификаты TSL/SSL в наши дни довольно дешевы. На самом деле, если вы не хотите тратить деньги вообще есть бесплатный letsencrypt.org — автоматизированный центр сертификации.
Python l Программа задания пароля с помощью цикла While
Вы можете сделать еще один шаг и использовать caddyserver.com который вызывает letsencrypt в фоновом режиме.
теперь, как только мы убрали HTTPS с пути.
вы не должны отправлять логин и пароль через полезную нагрузку POST или получать параметры. Вместо этого используйте заголовок авторизации (базовая схема аутентификации доступа), который построен следующим образом:
- имя пользователя и пароль объединяются в строку, разделенные двоеточие, например: username: password
- результирующая строка кодируется с помощью вариант RFC2045-MIME Base64, за исключением не ограниченного 76 char / line.
- метод авторизации и Пробел, т. е. «Basic», тогда поставить перед закодированной строкой.
Это может показаться немного сложным, но это не так. Есть много хороших библиотек, которые обеспечат эту функциональность для вас из коробки.
есть несколько веские причины, по которым вы должны использовать заголовок авторизации
автор: FullStackForger
вы можете использовать схему «вызов-ответ». Скажем, клиент и сервер оба знают секрет S. Тогда сервер может быть уверен, что клиент знает пароль (не выдавая его):
- сервер отправляет случайное число R клиенту.
- клиент отправляет H (R,S) обратно на сервер (где H-криптографическая хэш-функция, например SHA-256)
- сервер вычисляет H (R,S) и сравнивает его с ответом клиента. Если они совпадают, сервер знает клиент знает пароль.
Edit:
здесь есть проблема со свежестью R и тем фактом, что HTTP не имеет состояния. Это может быть обработано, если сервер создаст секрет, назовите его Q, что только сервер знает. Затем протокол звучит так:
- сервер генерирует случайное число R. затем он отправляет клиенту H (R, Q) (который не может быть подделан клиент.)
- клиент отправляет R, H (R, Q) и вычисляет H(R,S) и отправляет все это обратно на сервер (где H-криптографическая хэш-функция, такая как SHA-256)
- сервер вычисляет H (R,S) и сравнивает его с ответом клиента. Затем он принимает R и вычисляет (снова) H(R,Q). Если клиентская версия H(R,Q) и H (R,S) соответствует повторному вычислению сервера, сервер считает, что клиент аутентифицирован.
отметить, так как H (R,Q) не может быть подделан клиентом, H (R,Q) действует как cookie (и поэтому может быть реализован фактически как cookie).
Как легко ВЗЛОМАТЬ ТВОЙ ПАРОЛЬ в 2023? (Брутфорс)
Другой Редактировать:
предыдущее редактирование протокола неверно, поскольку любой, кто наблюдал H (R,Q), похоже, может воспроизвести его с правильным хэшем. Сервер должен помнить, какие R больше не свежие. Я CW’ING этот ответ, так что вы, ребята, можете отредактировать это и выработать что-то хорошее.
автор: Jeremy Powell
Если ваш веб-хост позволяет это, или вам нужно будет иметь дело с конфиденциальными данными, используйте HTTPS, период. (Это часто требуется законом afaik).
в противном случае, если вы хотите сделать что-то по HTTP. Я бы сделал что-нибудь подобное.
- сервер встраивает свой открытый ключ в страницу входа.
- клиент заполняет форму входа в систему и нажимает кнопку Отправить.
- запрос AJAX получает текущую метку времени с сервера.
- клиент боковой скрипт объединяет учетные данные, метку времени и соль (хэшируется из аналоговых данных, например. движения мыши, события нажатия клавиши), шифрует его с помощью открытого ключа.
- отправляет полученный хэш.
- сервер расшифровывает хэш —
- проверяет, достаточно ли недавняя метка времени (позволяет короткое 5-10-секундное окно). Отклоняет логин, если метка времени слишком старая.
- сохраняет хэш в течение 20 секунд. Отклоняет тот же хэш для входа в систему во время этого интервал.
- аутентификацию пользователя.
таким образом, пароль защищен, и тот же хэш аутентификации не может быть воспроизведен.
о безопасности токена сеанса. Это немного сложнее. Но можно сделать повторное использование украденного токена сеанса немного сложнее.
- сервер устанавливает дополнительный cookie сеанса, который содержит случайную строку.
- браузер отправляет этот файл cookie на следующий запрос.
- сервер проверяет значение в файле cookie, если оно отличается, то он уничтожает сеанс, в противном случае все в порядке.
- сервер снова устанавливает файл cookie с другим текстом.
Итак, если токен сеанса был украден, и запрос отправляется кем-то другим, то по следующему запросу исходного пользователя сеанс будет уничтожен. Так что если пользователь активно просматривает сайт, часто кликая по ссылкам, то вор далеко не уйдет с украденным знак. Эта схема может быть укреплена, требуя другой проверки подлинности для конфиденциальных операций (например, удаление учетной записи).
о реализации: RSA, вероятно, самый известный алгоритм, но он довольно медленный для длинных ключей. Я не знаю, насколько быстрой будет реализация PHP или Javascript. Но, вероятно, есть более быстрые алгоритмы.
автор: Calmarius
Я бы использовал серверную и клиентскую систему обмена ключами Диффи-Хеллмана с AJAX или несколькими формами(я рекомендую первое), хотя я не вижу никаких хороших реализаций в интернете. Помните, что библиотека JS всегда может быть повреждена или изменена MITM. Локальное хранилище может быть использовано для борьбы с этим в определенной степени.
автор: Andrey Akhmetov
можно использовать SRP использовать безопасные пароли по незащищенному каналу. Преимущество заключается в том, что даже если злоумышленник нюхает трафик или компрометирует сервер, он не может использовать пароли на другом сервере. https://github.com/alax/jsrp — это библиотека javascript, которая поддерживает безопасные пароли через HTTP в браузере или на стороне сервера (через узел).
автор: Brian Minton
HTTPS настолько мощный, потому что он использует асимметричную криптографию. Этот тип криптографии позволяет не только создать зашифрованный туннель, но и убедиться, что вы говорите с нужным человеком, а не с хакером.
Источник: askdev.ru
Как организовать хранение и передачу логина/пароля с клиентского приложения на серверное?
Клиентское приложение имеет функционал «Запомнить меня», чтобы в дальнейшем не приходилось повторно вводить данные.
Поскольку сейчас используется SQLite (нельзя запаролить), то персональные данные в нем хранить не можем.
Про существованией хэшей, солей знаю.
Но как и где можно безопасно хранить логин и пароль на локальном ПК пользователя, дабы оттуда подтягивать данные в формочку, затем хэшировать и передавать на сервер?
1. Хранить голый логин и пароль?
2. Хранить зашифрованный логин и пароль и в программе расшифровывать и вставлять в форму?
3. Хранить в Реестре?
4. Хранить в текстовом файле?
5. Хранить в БД?
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.
Подписка на обсуждение 3
Подписка на раздел 227
Вам это нравится? Поделитесь в социальных сетях!
- Алексей Внуков
- #
- 21 апреля 2021 г. 16:07
можно использовать любой пункт из 2-5, если вы делаете при этом шифрование
не зберігати пароль локально взагалі, та на сервері не варто, при першому конекті на сервер користвача звісно по https передає хеш пароля, на сервері домішуєм сіль, згенероване записуєм в базу як пароль (це нам потрібно на той випадок якщо користвач буде лоігінитись через пароль), далі на основі якигось даних генерим нормальинй довгий ключ для авторизаці не забуваєм цей ключ записати в якусь таблицю, бажано з терміном життя типу місяць, і бажано мати ще якийсь ідентифікатор, типу мак, айпі, які теж віправляюстяь при авторизації. ключ відправляємо на клієнт, який записуєм в базу, або темп в файл з якоюсь назвою, при наступному запуску клієнта якщо стояла галочка, відправляємо цей ключ, разом з додатковими дами (це я про мак наприкла) і користувача авторизовуєм по ключу.
ніколи не зберігайне не шифровані паролі на клієнті чи на сервері.
Комментарии
Только авторизованные пользователи могут публиковать комментарии.
Пожалуйста, авторизуйтесь или зарегистрируйтесь
Источник: evileg.com
Обзор сервисов для отправки одноразовых паролей и кодов
Привет! Меня зовут Ася Лаврентьева, я из i-Digital. Подготовили для вас небольшой обзор сервисов, которые можно использовать для авторизации пользователей, подтверждения номера телефона, списаний с карты лояльности.
3352 просмотров
Почему пишем об этом
В 2019 годы мы вывели на рынок новый продукт, сервис авторизации по звонку Flashсall. На тот момент мы были в числе первых поставщиков услуги. Сейчас флешкол активно использует ритейл, финансовый сектор, в прошлом году один из крупных банков начал авторизовывать клиентов с помощью флешкол.
К сервису привыкли пользователи, а бренды оценили надежность и экономичность кодов в номере телефона.
Но в конце 2021 года качество сервиса стало падать. Пулы номеров, с которых поступали звонки, начали блокировать операторы массово и в ручном режиме: искали сервисы, которые присылают флешкол и вносили пулы номеров в блок.
Почему блокируют Flashсall
Для Flashсall используются так называемые «дешевые» звонки: тарификация за соединение не применяется, а для получения кода не нужно снимать трубку. На этих звонках операторы теряют деньги: трафик уходит из SMS во флешколы.
Коды в звонке
Если речь идет о таком же экономичном способе с максимальным покрытием, то альтернатив немного.
Text-to-Speech
Это те же голосовые рассылки, только вместо предложения бесплатного обследования полости рта робот продиктует код. Text-to-Speech тарифицируется по-разному: посекундно, по 5 или 10 секунд. Чем длиннее код, тем дороже звонок. Средняя стоимость у разных провайдеров: 3-3,6 рублей за минуту при посекундной тарификации. Например, если вы диктуете код в течение 15 секунд, то его стоимость будет от 0,8₽ и выше.
VoiceCode. Коды в звонке, для получения кода пользователь должен прослушать код.
VoiceCode для пользователя не отличается от обычных голосовых рассылок, но технически построен иначе. Звонки совершаются с пула номеров мобильного оператора РФ, регистрировать номер не нужно, для получения кода пользователь должен прослушать звонок. Если сравнивать с Flashcall, то сервис теряет в удобстве: проще прочитать код с экрана, чем отвечать на звонок. Но мы искали возможность предоставить клиентам доступный и экономичный сервис, для которого риск блокировки со стороны операторов будет значительно меньше.
Этого мы добиваемся за счет того, что используем «дорогой канал» для VoiceCode: во-первых, оплата идет уже за факт соединения, а значит операторам не интересно такой трафик блокировать, во-вторых, пользователь снимает трубку, значит применяется посекундная тарификация звонка.
В VocieCode мы используем стандартные текстовые шаблоны. Это удобно с точки зрения тарификации звонка – мы укладываемся в 15 секунд. Плюс, предполагая, что большая часть брендов, которые работали с флешколом, перейдут в VoiceCode, нам кажется разумным унифицировать такие звонки, чтобы пользователи к ним привыкли и лояльно реагировали.
Если сравнивать голосовые рассылки с технологией Text-to-Speech, то VoiceCode удобнее с точки зрения подключения: не нужно регистрировать номер, придумывать шаблон – достаточно только провести интеграцию и передавать запросы по API.
Текстовые коды
Для компаний, которые не шлют критичный трафик: пароли для входа в интернет-банк, мобильные приложения, 3D-secure коды, можно рассмотреть варианты отправки кодов в альтернативных каналах. Они уступают SMS и звонкам в скорости и покрытии, но стоят дешевле.
Вконтакте/Одноклассники
Отправка кодов доступна через рассылки Вконтакте. Однако в этом сервисе есть существенные ограничения: человек, которому вы отправляете код должен быть активным пользователем VK, в идеале у него должно быть установлено мобильное приложение. Скорость доставки таких кодов не такая высокая, поэтому пароли во Вконтакте присылают редко.
Коды в Telegram
Telegram рассылки набирают популярность – бизнесу нужна независимая от тарифов сотовых операторов альтернатива смс, которые постоянно дорожают,
В рамках Telegram-рассылок, которые недавно стали доступны пользователям нашего сервиса рассылок i-digital direct, мы проработали кейс с авторизацией с помощью бота. Важный момент: для получения сообщений от бота, пользователь должен на него подписаться и поделиться своим номером телефона, иначе рассылки работать не будут.
Вариантов реализации отправки кода в Telegram два.
- Если вы уже начали использовать Telegram-рассылки и ваш клиент подписался на бота, можно сразу отправлять код в Telegram, настроив переотправку в SMS на случай если код не доставится.
- Если пользователь еще не подписан на Telegram-бота, то можно предложить ему перейти по ссылке для подписки и получить код в Telegram.
Схема требует больше действий от пользователя, чем звонок, но кому-то удобнее иметь текстовый код под рукой, чем слушать и запоминать четыре цифры.
Дополнительные плюсы в телеграм кодах в том, что пользователь подпишется на ваш канал. После подписки вы сможете отправлять ему полезные сервисные уведомления и сокращать затраты на SMS трафик.
Коды в WhatsApp
В 2019 году, когда на рынке появился WhatsApp Business, его начали использовать в том числе для отправки авторизационных кодов. Механика простая: пользователь переходит по ссылке с предустановленной фразой, в ответ бот отправляет ему код авторизации.
Эта схема хорошо работала до тех пор, пока в 2022 году входящие сообщения от пользователей не стали платными. Несмотря на то, что WhatsApp сохранил 1000 бесплатных сессий в месяц, для многопользовательских сервисов этот вариант авторизаций перестал быть привлекательным и экономичным. Если количество диалогов превысит 1000 в месяц, даже за каждое входящее сообщение придется платить 3,4₽, плюс абонентскую плату.
Но не все так плохо. На рынке уже существуют сервисы для WhatsApp-рассылок, для работы с которыми не нужно открывать официальный WhatsApp аккаунт и стоят они дешевле. При выборе такого сервиса для отправки кодов и паролей в WhatsApp важно обращать внимание на следующие возможности:
- отправка сообщений по API и добавления WhatsApp-канала в каскад
- обработка входящих сообщений и интеграция простой механики для отправки кода в ответ на входящее сообщение пользователя.
Ограничения у этого метода есть: WhatsApp следит за активностью в таких каналах и может заблокировать аккаунт, в котором количество исходящих сообщений сильно превышает входящие.
Источник: vc.ru