Подтвердить что ты не робот

Безопасный доступ к базе данных из приложения iOS

Я выбрал MySQL после поиска между MySQL и SQLite для доступа, потому что моему iPhone-приложению нужно извлекать информацию из онлайн-базы данных, которая уже находится в MySQL.

Я считаю, что традиционным способом доступа к информации было бы: иметь php файл на сервере, который выполняет доступ для вас.

Приложение iPhone будет вызывать этот php файл, и он вернет результаты.

Приложение iOS вызовет http://somewebsite.com/index.php?id=234, и веб-сайт распечатает имя пользователя id = 234.

What happens in the background of an iPhone app

Теперь, насколько безопасен этот процесс?... Я бы, очевидно, использовал подготовленные инструкции и https. Но что, если кто-то нашел URL для этого сайта? Как защитить себя от неправильного использования (кто-то может создать список всех моих пользователей)? Является ли это стандартным способом подключения вашего iPhone-приложения и получения информации из базы данных?


Изменить: Кроме того, скажем, мне нужно создать страницу входа в приложение... У меня есть база данных MySQL с именем пользователя и паролем (очевидно, хешировано). Было бы безопасно использовать переменные $_GET для проверки подлинности. Например, например: https://somewebsite.com/checkauth.php?username=test&password=C3LyiJvTCQ14Q и распечатать php yes или no. Примеры изображений ниже:

This is how the iPhone would authenticate a userThis is how the iPhone would authenticate a user

Я бы предположил, что вышеуказанный метод будет небезопасным... но мне нужно быть просвещенным.

Кроме того, я предпочел бы избегать вызова базы данных в приложении с использованием стороннего API, не поддерживаемого Apple.

4b9b3361

Ответ 1

Лучший способ сделать это - настроить API для взаимодействия с базой данных на сервере, а ваше приложение iPhone просто запрашивает API и возвращает данные в машиночитаемом формате, таком как JSON, см. http://en.wikipedia.org/wiki/JSON и http://json.org/. Поэтому для входа пользователя в систему сервер вернется, может быть, что-то вроде:

{
    "result": false,
    "error": "Invalid username or password"
}

Это будет сгенерировано PHP со следующим кодом:

echo json_encode(array(
    "result" => false, 
    "error" => "Invalid username or password"
));

Также обратите внимание, что вы должны использовать коды ответов HTTP в сочетании с этим, например, 401 для несанкционированного доступа.

JSON может использовать логические и другие структуры данных в своем формате. Почти все основные языки имеют поддержку/библиотеки для него.

Преимущества этого в том, что он позволяет вам создавать другие приложения, используя тот же API, такой как версия Android или фактический веб-сайт.

Этот SO вопрос является хорошей отправной точкой для безопасности мобильных приложений:

Создание API для мобильных приложений - Аутентификация и авторизация

Основные моменты - использовать HTTPS. При отправке учетных данных пользователя вы можете вернуть токен пользователя (ключ api), который может быть использован для будущих запросов и сохранен в приложении iPhone для будущего доступа.

Например: https://iphoneapp.com/notifications.json?key=98fy92473r92hAAIYEFG397qbqwiuUEAF

Ваш ключ должен быть отправлен в HTTP-заголовке или в POST, чтобы он не записывался в журналы и т.д.

Примечание. Это просто случайная строка, введенная на клавиатуре.

Этот метод позволяет вам удалять/регенерировать ключ, если он скомпрометирован. Вы также можете установить ограничение скорости на клавиши и различные другие параметры.

Другим огромным преимуществом является создание API, который использует ваше собственное приложение, что он будет поддерживаться высоким стандартом, а другие сторонние компании также могут использовать API (если вы им разрешаете).

Изменить: Кроме того, скажем, мне нужно создать страницу входа в приложение... я иметь базу данных MySQL с именем пользователя и паролем (очевидно, hashed). Было бы безопасно использовать переменные $_GET, чтобы убедиться, что они проверку подлинности. Как например: https://somewebsite.com/checkauth.php?username=test&password=C3LyiJvTCQ14Q

Вы должны отправить эти конфиденциальные данные, используя POST, но в какой-то момент любая служба должна войти в систему. Использование HTTPS должно помочь, поскольку оно предотвращает подслушивание. После первой проверки подлинности вы можете вернуть токен и воспользоваться преимуществами, упомянутыми выше.

Что касается входа пользователя в систему, так как ваш PHP соответствует хорошей практике, у вас не должно быть проблем. См. http://www.phptherightway.com/, это очень поможет, если у вас есть вопросы.

Определенно исследовать OAuth и использовать это, если вы можете/хотите.

Это просто отправная точка и НЕ предназначена для слова "слово в слово", требуется дополнительное чтение и поиск в Интернете.

Ответ 2

Если вы ищете альтернативу "строить API с нуля", мы использовали веб-сервис Kumulos, доступный на kumulos.com, для быстрого и простого решения.

Эта служба позволяет разработчику подключаться к базе данных MySQL и создавать модель данных и API через веб-страницу, а затем развертывать на вашей платформе собственную библиотеку. Я считаю, что вы также можете импортировать существующую модель данных.

Как только модель данных будет построена на веб-странице, вы сможете создавать API-интерфейсы и указывать входные и выходные параметры. API-интерфейсы моделируются на основе типа выполняемой вами операции SQL, такой как SELECT, UPDATE, INSERT, DELETE.

В вашем случае вы хотели бы смоделировать интерфейс входа/аутентификации, который принимает имя пользователя и (хешированный) пароль, проверяет данные в таблице Users и возвращает результаты проверки подлинности.

Как только ваши API будут смоделированы с помощью веб-страницы, вы сможете "развернуть" свою конфигурацию и создать собственные библиотеки для iOS, Android, PHP и других.

Сгенерированная библиотека Obj C попадает в ваш проект, и вы делаете и отвечаете на API, используя объектные вызовы c и делегаты.

Kumulos включает в себя некоторые другие функции, такие как экспорт данных, измерение вызовов API и то, что они называют KScript. Это, по сути, возможность конвертировать ваш вызов в javascript на сервере (также настроенный через веб-страницу), чтобы значительно расширить гибкость и возможности функций вызова API, которые вы можете создать.

У нас было несколько вопросов или вопросов поддержки за последние несколько месяцев, и их поддержка была на высшем уровне. Их основой является Rackspace. На данный момент у нас есть около 8 или 10 производственных приложений, на которых запущены API, и они вполне удовлетворены тем, что не нанимают разработчика API:)

Ответ 3

Многие мобильные приложения используют API для получения и хранения информации на серверах. Выяснение некоторых из этих конечных точек не является сложным, и отсутствие необеспеченных конечных точек, возвращающих важную информацию, является опасной задачей.

Первым уровнем защиты вашего API может быть создание "API-ключа", который идентифицирует приложение. Этот ключ хранится на сервере и проверяется при каждом запросе. Запрос без ключа API должен возвращать код статуса HTTP 401 (неавторизованный).

API-ключи в порядке, но недостаточны, когда некоторые вызовы могут выполняться только определенными пользователями. Например, пользователю необходимо обновить свою информацию, только владелец информации должен иметь возможность выполнить этот вызов, а не другой пользователь. Для этого вы можете передать аутентификационную информацию, которая идентифицирует пользователя для выполнения действия обновления.

Я не рекомендую использовать имя пользователя/пароль для каждого запроса, вместо этого пользователь должен пройти аутентификацию один раз и позволить серверу отправлять обратно токены аутентификации, которые могут быть использованы приложением для выполнения будущих аутентифицированных вызовов. Взгляните на OAuth2 в качестве потенциальной платформы авторизации. Также проверьте OAuth 2.0 - Хорошее, плохое и уродливое.

Я предлагаю использовать BShaffer сервер OAuth2 в PHP. Также см. Рекомендации по защите REST API/веб-службы для альтернатив.

С вашего вопроса, похоже, что существует существующая подсистема, я рекомендую создать простой интерфейс, который упрощает использование подсистемы и многократно используется для нескольких клиентов вместо того, чтобы модифицировать подсистему для размещения API. Это обычно называют шаблон оформления фасада.

Многие PHP Framework имеют пакеты для реализации пользовательских API RESTlike. Symfony имеет FOSRestBundle, FuelPHP имеет контроллер REST из коробки, а CodeIgniter имеет сервер REST.

Подводя итог:

  • Создайте простой интерфейс для доступа к информации из существующей системы (REST API).
  • Защитите свою личную информацию с помощью надлежащего механизма проверки подлинности (возможно, OAuth2).
  • Используйте существующие библиотеки и/или фреймворки для ускорения разработки.
  • В результате ваш код будет повторно использоваться для нескольких приложений и платформ!

Ответ 4

если вы хотите получить доступ к базе данных из приложения IOS и сохранить данные в базе данных, вам необходимо использовать middleware solutio.

который является Webservice

Создать веб-сервер в Microsoft ASP dot Net И получить доступ к этому WebService в приложении IOS. С этим вы можете общаться между двумя разными ОС.

возврат из Webservice XMLdoucment, который может быть дополнительно проанализирован с помощью xml-пресетов.