Таким образом, я работаю над приложением мобильной платформы, которое я хотел бы сделать, чтобы пользователи аутентифицировали по сети. Я задавался вопросом лучший способ сделать безопасность. Пользователь отправляет пароль за HTTP к php серверу, который проходит проверку подлинности против mysql базы данных по тому же серверу. Очевидно, я не хочу отправлять пароль в простом тексте по Интернету, но я также не хочу делать 2 хеша SHA.
Это - то, на что сервер похож (в псевдокоде)
$pass = $_POST['pass'];
if ((get PASSWORD where USERNAME = USERNAME) == SHA($pass)) return PASS;
Это довольно стандартно, и я не думаю, что существует любой другой способ сделать это. Но я задавался вопросом, как я должен подготовить данные прежде, чем отправить его по Интернету.
Вы можете использовать SSL , если ваше клиентское приложение его поддерживает.
Для обычных некритичных систем большинство веб-сайтов отправляют пароль в виде обычного текста через Интернет во время http-запроса. Затем пароль кодируется SHA1/MD5 на стороне сервера и сверяется со значением в базе данных.
Вы также можете использовать https basic authentication, при этом пароль кодируется простым алгоритмом. Но хотя он не отправляет пароль открытым текстом, кодировка настолько проста, что ее очень (очень!) легко взломать. Но при использовании базовой аутентификации вы не сможете использовать обычную форму входа в систему, вам придется обходиться поддержкой базовой аутентификации браузером (не очень удобной для пользователя!).
Если вам нужна большая безопасность, большинство сайтов просто устанавливают SSL-сертификат на стороне сервера, который вы покупаете у провайдера (например, godaddy). Это позволит получить доступ к вашему скрипту входа через зашифрованное SSL-соединение. Такое решение считается безопасным (при условии, что пароль нелегко угадать или украсть).
Другой интересный, но малораспространенный подход заключается в том, чтобы выполнять SHA1-кодирование в JavaScript перед выполнением (Ajax) пост-запроса к серверу (JS sha-1 пример). Теоретически, это может обеспечить вполне разумную безопасность...
А если этого все еще недостаточно, вы можете рассмотреть возможность установки клиентских сертификатов или системы ответа-вызова с помощью калькулятора или SMS.
Как заметил Пекка, SSL - ваш лучший вариант.
В качестве альтернативы использовать SHA в JavaScript довольно просто, быстро и уже написано. Вот пример и библиотека: crypto.js