Вот мои мысли, основанные на том, что я знаю:
1) Is this secure for sending passwords? (via ASIHTTPRequest and the POST method?)
Вам необходимо убедиться, что вы отправляете эту информацию через https (SSL), а не в виде простого Http.Причина в том, что вы не можете контролировать, где находится пользовательская точка беспроводного доступа.Насколько вы знаете, пользователь может подключиться к открытой точке доступа, принадлежащей определенному хакеру.Передав его, он сможет прослушать пакет и получить необходимую информацию для доступа к веб-сервису, даже если пароль хешируется.Отправка через https обеспечит шифрование пакета с помощью надежного ключа.Даже если хакеру удастся перехватить пакет, ему потребуется много времени, прежде чем он сможет расшифровать сообщение.
2) В последующих представлениях пользователь должен иметь возможностьвзаимодействовать со своей учетной записью (например, размещать> сообщения, статусы и изображения в Facebook). Как сохранить статус пользователя, вошедшего в систему>, чтобы каждый раз, когда пользователь взаимодействовал с базой данных, я мог гарантировать, что пользователь все еще вошел в систему ичто это один и тот же пользователь?
Один из часто используемых способов сделать это - получить маркер сеанса после входа пользователя в систему. То есть вы создаете случайный сгенерированный идентификатор, который вы возвращаете при успешном входе в систему.Затем вы должны сопоставить этот токен с идентификатором пользователя в серверной части, и он связан с тайм-аутом сеанса.Вы обновляете этот тайм-аут каждый раз, когда пользователь подключается к веб-сервису, и тайм-аут его по истечении определенного периода, чтобы избежать нарушения безопасности.Затем вы сохраните маркер сеанса на вашем устройстве, а затем используете его для последующего вызова.Пока сеанс активен, пользователь входит в систему. Поскольку токен связан с конкретным пользователем, вы также удостоверяете личность вызывающего абонента.
Причина, почему кто-то еще не использует токен других людей, является причиной, по которойвам нужен SSL для защиты канала и предотвращения перехвата.Предполагая, что вы защитили свои каналы соединения, единственный способ получить токен - это
- для проверки личности через логин
- Телефон украден хакерами, которые могут получить токеносмотр местного хранилища.
Сопоставление необходимо для того, чтобы вы могли проверить, что токен является реальным токеном, который был связан с пользователем при входе в систему.Кроме того, для номера 2 вы можете предложить функцию удаленной очистки, которая в основном убивает отображение и делает этот токен недействительным.
Другая очень важная часть этого токена - токен, который нельзя угадать и должен быть случайным криптографическим (см. Рекомендации по случайности для безопасности ).Если токен основан только на псевдослучайности, умный хакер сможет угадать свой алгоритм и угадать свой следующий / предыдущий токен, а также сможет получить любой допустимый токен в таблице.
Существует многоалгоритм генерации этого токена.Например, язык программирования Java предоставляет класс SecureRandom для обеспечения криптографической случайности, а .NET имеет аналогичный безопасный класс RandomGenerator .
Если вы хотите взглянуть на алгоритм, который OATH предложил Основанный на времени алгоритм одноразового пароля (TOTP) , который является расширением HOTP .Большинство языков / платформ имели бы криптографически сильный генератор случайных чисел, который вы могли бы использовать немедленно, хотя без необходимости писать его самостоятельно.
В зависимости от реализации / платформы вашего сервиса, вы можете запросить у SO подходящий класс / модуль для криптографически случайного генератора, такой как тот, который задан здесь «Как генерировать криптографически безопасные случайные числа с помощью php"