2015-04-29 2 views
4

Я разрабатываю одно приложение для Android, и я создаю веб-сервис на основе php для извлечения информации из базы данных.Как защитить php based webservice

Дело в том, что я действительно не знаю, как обеспечить эту услугу.

Например, если моему приложению андроид требуется получить некоторую информацию с сервера, он назовет http://mywebservice.com/service.php и отправит несколько параметров POST в качестве пользователя и пароль для входа в систему или что-то вроде, например, одного идентификатора пользователя получить его данные.

Конечно, любой, у кого есть достаточные знания, сможет также получить эти данные. И это то, чего я не хочу.

Любой, кто знает параметры для отправки на мой сервер, сможет извлекать из него информацию.

Как это можно защитить?

Я читал о OAuth, OAuth2, две ноги и три длинноногие реализации него, HTTPS ..

Но на данный момент, я действительно не знаю, как обеспечить это.

Я хочу, чтобы веб-служба отвечала только на мое приложение, а не на кого-то другого.

PS: Даже есть что-то вроде http://myservice.com/get_information.php, что вы отправляете идентификатор, и вы можете получить много информации. Конечно, я контролирую это в своем приложении, только зарегистрированные и уполномоченные люди могут выполнить это вызов, но это все равно. Каков наилучший способ сделать такие вещи?

+1

Я думаю, что хорошим началом было бы взглянуть на функцию '' crypt() '] (http://php.net/manual/fr/function.crypt.php), если она еще не выполнена. –

+0

Как насчет имени пользователя и пароля, отправленного с каждым запросом HTTP? Они могут быть автогенерированы, если хотите, или набраны пользователем, в зависимости от ситуации. – halfer

ответ

1
  1. Всегда используйте SSL для предотвращения атаки типа «человек в середине». В противном случае кто-то, кто нюхает соединение (в случае подключения через общественные сети Wi-Fi или сети, это огромный риск) может видеть имя пользователя и пароль.

  2. Не отправляйте имя пользователя и пароль по каждому запросу, вместо этого реализуйте oAuth2, ваш клиент в этом случае должен будет отправить имя пользователя и пароль только один раз, а затем для других запросов вам нужно будет отправить только ключ auth , Хорошая документация для реализации OAuth-сервер: http://www.sitepoint.com/creating-a-php-oauth-server/

  3. Посмотрите на этот документ: https://www.owasp.org/index.php/REST_Security_Cheat_Sheet

3

Некоторые концепции обеспечения веб-сервиса (может забыть некоторые понятия):

  • Протоколы: HTTPS в текущем случае, поэтому данные не передаются в ясном формате.

  • Сессии: сеанс имеет время жизни, уникальный идентификатор (токен сеанса/id/whatever) и содержит код ошибки. Когда пользователь вызовет ваш веб-сервис, сеанс будет создан, и его токен будет возвращен. При каждом вызове веб-службы вы будете проверять, жив ли сеанс. Вы можете добавить сложность к ожидаемым входам, выходам и обменам. Код error_code будет использоваться для ведения журнала (ошибки могут исходить от атаки или ошибки вашего веб-сервиса).

  • Шифрование данных: Используйте асимметричные функции, такие как password_hash() или crypt() для проверки подлинности. Используйте симметричные алгоритмы, такие как AES 128 (10 раундов) или 256 (14 раундов) для получения конфиденциальных данных, которые вам нужно получить.

  • Входы тестирования: Если вы вставляете заданные аргументы в запрос, попробуйте prevent SQL injection. Некоторые недобросовестные люди также могут попытаться отправить аргументы, которые могут привести к сбою вашего веб-сервиса.

  • Перейти к стандартам: Как сказал Çağatay, попытаться реализовать, например oauth2, потому что стандарт большой части времени гораздо лучше, чем то, что мы будем строить: S

Надеется, что это помогает.

Редактировать: Лист безопасности REST тоже хорош.

+0

Примечание. Пожалуйста, подтвердите свои зашифрованные данные (https://paragonie.com/blog/2015/05/using-encryption-and-authentication-correctly). –

2

Я закончил использование OAuth. Более конкретно эта библиотека https://bshaffer.github.io/oauth2-server-php-docs/ Если вы следуете инструкциям, она очень проста в использовании и работает очень хорошо. Я думаю, что это действительно хороший способ начать работу с OAuth.

Смежные вопросы