Я создаю приложение и веб-сайт для проекта, который у меня есть, но я не уверен, что делать с логином. Это не «Я noob, и я хочу приложение с логином» -question. Я несколько опытен как с веб-технологиями, так и с базами данных и приложениями, но я никогда не затрагивал тему безопасности перед тем, чем не применял шаблоны приложений.Какова стандартная процедура, используемая для систем входа в iOS-приложения?
То, что я представляю, - это «простая» система входа в систему, такая как Skype, Facebook, NetFlix, действительно любое приложение, к которому вы можете войти, в который также входит веб-сайт для входа в систему.
Часть моего вопроса касается безопасности процесса. Моя первоначальная мысль состоит в том, что пароль в чистом тексте никогда не должен быть отправлен через Интернет, что заставляет меня думать, что пароли должны быть хэшированы/зашифрованы на телефоне, а также на веб-сайте при входе в систему. хэширования/шифрования времени раньше, но просто используя sha1
и md5
для «преобразования» текста. Каков правильный способ сделать это? С моими текущими знаниями я предполагаю, что если я использую md5
для шифрования пароля, любой может расшифровать его также с помощью md5
, но я мог бы использовать SALT
(?) Или какую-то форму для изменения ключа. Это то, как это делают «большие мальчики», или есть секретный проход, о котором я не знаю?
Теперь на реальный вопрос вопрос .. Как я могу безопасно хранить логин?
Что я пробовал: при создании «тестового проекта» в Xcode для этого я просто создал класс User
с полем для username
. Когда «входе», введя имя пользователя и пароль, я просто отправил POST
-метод HTTP-request
на мою .php
-страницу, которая просто выполнила SELECT * FROM User WHERE Username = '$_POST['username']' AND Password = '$_POST['password']';
. Если база данных вернула одну строку, тогда пароль был прав, и страница могла распечатываться пользователь в JSON или что-то еще. Когда устройство получило успешный вход в систему, я преобразовал пользовательский объект в приложение, теперь содержащее имя пользователя (и потенциально UserID, E-mail, адрес и т. Д.) До NSData*
и используя NSKeyedArchiver
и NSKeyedUnarchiver
для сохранения и загрузки пользователя, никогда не повторять подлинность. Если пользователь нажимает «Выход», я протираю этот «архив». Это работает, но я чувствую, что это не особенно безопасный способ сделать это. Если да, то почему именно это?
(Наша фоновым в настоящее время от Google App Engine (Java), который поддерживает OAuth. Некоторые рекомендуют, но мы не можем найти какие-либо надлежащей документации, которая имеет смысл для нашего плана с настраиваемыми пользователями)
Я имел дело с этим с помощью WebView, чтобы отобразить веб форму входа, и, при успешном входе в систему, установив печенье с маркером проверки подлинности, ассоциированные с пользователем в интерфейсе. – Linuxios
@ Linuxios Я где-то читал, что некоторые приложения были отклонены Apple за это. В любом случае, даже если это «разрешено», это не совсем то, что я хочу. Я хочу создать свою собственную регистрационную форму для iOS-UI. Спасибо, в любом случае. – Sti
Вместо использования алгоритмов хэширования (md5, sha), не предназначенных для использования с паролями, учитывая использование более безопасного (например, PBKDF2). См. Сообщение SO здесь: http: //stackoverflow.com/q/8569555/558933 –