Я создаю приложение и веб-сайт для проекта, который у меня есть, но я не уверен, что делать с логином. Это не "я - нубо, а я хочу приложение с логином" - вопрос. Я несколько опытен как в области веб-, так и для баз данных и приложений, но на самом деле я никогда не затрагивал предмет безопасности, кроме шаблонов приложений.
То, что я представляю, - это "простая" система входа в систему, такая как Skype, Facebook, NetFlix, действительно любое приложение, к которому вы можете войти в систему, в котором также есть веб-сайт для входа в систему.
Часть моего вопроса касается безопасности процесса. Моя первоначальная мысль состоит в том, что пароль в чистом тексте никогда не должен быть отправлен через Интернет, что заставляет меня думать, что пароли должны быть хэшированы/зашифрованы на телефоне, а также на веб-сайте при входе в систему. хэширования/шифрования времени раньше, но просто используя sha1
и md5
для "преобразования" текста. Каков правильный способ сделать это? С моими текущими знаниями я предполагаю, что если я использую md5
для шифрования пароля, любой может также расшифровать его с помощью md5
, но я мог бы использовать SALT
(?) Или некоторую форму для изменения ключа. Это то, как это делают "большие мальчики", или есть секретный проход, о котором я не знаю?
Теперь на реальный вопрос. Как я должен безопасно хранить логин?
То, что я пробовал: при создании "тестового проекта" в Xcode для этого я просто создал класс User
с полем для username
. Когда "входе", введя имя пользователя и пароль, я просто отправил POST
-method HTTP-request
на мою .php
-страницу, которая просто выполнила SELECT * FROM User WHERE Username = '$_POST['username']' AND Password = '$_POST['password']';
. Если база данных вернула одну строку, тогда пароль был правильно, и страница может распечатать пользователя в JSON или что угодно. Когда устройство получило успешный вход в систему, я преобразовал пользовательский объект в приложение, теперь содержащий имя пользователя (и потенциально UserID, E-mail, адрес и т.д.) До NSData*
и используя NSKeyedArchiver
и NSKeyedUnarchiver
, чтобы сохранять и загружать пользователя, а не снова проверять подлинность. Если пользователь нажимает "Выход", я протираю этот "архив". Это работает, но я чувствую, что это не особенно безопасный способ сделать это. Если да, то почему именно это?
(Наш back-end в настоящее время является Google App Engine (java), который поддерживает OAuth. Некоторые рекомендуют это, но мы не можем найти подходящую документацию, которая имеет смысл для нашего плана с пользовательскими пользователями)