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