Отправка паролей по сети

Таким образом, я работаю над приложением мобильной платформы, которое я хотел бы сделать, чтобы пользователи аутентифицировали по сети. Я задавался вопросом лучший способ сделать безопасность. Пользователь отправляет пароль за HTTP к php серверу, который проходит проверку подлинности против mysql базы данных по тому же серверу. Очевидно, я не хочу отправлять пароль в простом тексте по Интернету, но я также не хочу делать 2 хеша SHA.

Это - то, на что сервер похож (в псевдокоде)

$pass = $_POST['pass'];

if ((get PASSWORD where USERNAME = USERNAME) == SHA($pass)) return PASS;

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

5
задан Justin Johnson 9 May 2010 в 09:33
поделиться

4 ответа

  1. Если вы хотите безопасности, ВЫ. ДОЛЖЕН. ИСПОЛЬЗОВАТЬ. HTTPS. С правильным, несамоподписанным сертификатом. Что бы вы ни делали, идентификационные данные, аутентифицированные при незашифрованном обмене данными, украсть будет тривиально. (Не обращайте внимания на пароль, злоумышленник может просто украсть cookie сеанса, который предоставляется с каждым запросом.)
  2. Хеширование само по себе бесполезно, вы должны солить его. (На самом деле это не связано с аутентификацией - это второй уровень защиты на случай, если кто-то украдет вашу базу данных. Что, вероятно, произойдет рано или поздно, если вы станете многообещающей целью.) Используйте bcrypt с длинной случайной солью для каждого пользователя, sha * небезопасен, потому что он слишком быстрый.
  3. Используйте методы, которые уже используются в крупных проектах, ориентированных на безопасность. Эти методы до некоторой степени выдержали испытание временем. Существуют методы, основанные на запросах, которые позволяют избежать отправки пароля в любой форме, но шифрование - это сложно, и очень легко реализовать безопасные алгоритмы небезопасным способом. Используйте хорошую структуру безопасности (например, PHPass ), не полагайтесь на код, который широко не используется.
11
ответ дан 18 December 2019 в 11:54
поделиться

Вы можете использовать SSL , если ваше клиентское приложение его поддерживает.

4
ответ дан 18 December 2019 в 11:54
поделиться

Для обычных некритичных систем большинство веб-сайтов отправляют пароль в виде обычного текста через Интернет во время http-запроса. Затем пароль кодируется SHA1/MD5 на стороне сервера и сверяется со значением в базе данных.

Вы также можете использовать https basic authentication, при этом пароль кодируется простым алгоритмом. Но хотя он не отправляет пароль открытым текстом, кодировка настолько проста, что ее очень (очень!) легко взломать. Но при использовании базовой аутентификации вы не сможете использовать обычную форму входа в систему, вам придется обходиться поддержкой базовой аутентификации браузером (не очень удобной для пользователя!).

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

Другой интересный, но малораспространенный подход заключается в том, чтобы выполнять SHA1-кодирование в JavaScript перед выполнением (Ajax) пост-запроса к серверу (JS sha-1 пример). Теоретически, это может обеспечить вполне разумную безопасность...

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

0
ответ дан 18 December 2019 в 11:54
поделиться

Как заметил Пекка, SSL - ваш лучший вариант.

В качестве альтернативы использовать SHA в JavaScript довольно просто, быстро и уже написано. Вот пример и библиотека: crypto.js

0
ответ дан 18 December 2019 в 11:54
поделиться
Другие вопросы по тегам:

Похожие вопросы: