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