2013-03-29 2 views
1

Я создаю приложение для Android, которое использует веб-службу PHP (я также создаю это).Android App и PHP Web Service Security

Мой вопрос в том, как предотвратить несанкционированные пользователи, использующие мой веб-сервис? Например, может ли кто-нибудь получить адрес моего веб-сервиса и использовать его за пределами моего приложения (например, отправьте переменные post на мою службу)?

Другой связанный с этим вопрос: как предотвратить нежелательные запросы на мой веб-сервис? Будет ли это случай регистрации IP-адреса и ограничения количества вызовов?

ответ

0

Вы можете использовать HTTPS соединение между устройством Android и конечной точкой API webservice.

Ограничьте свой веб-сервис так, чтобы он принимал только соединения HTTPS. Вы можете легко сделать это с помощью Apache (возможно, используя SSLRequireSSL directive) или непосредственно в вашем обработчике подключений PHP.

При использовании транспортного потока HTTPS вы можете передать конкретные аргументы при вызове API на свой веб-сервис, чтобы гарантировать, что запрос был отправлен из вашего приложения. Никто не сможет узнать, какие конкретные данные переданы, и не сможет воспроизвести подключение к вашему удаленному сервису.

Что касается вашего второго вопроса, вы действительно можете ограничить количество запросов на заданный промежуток времени. Либо в PHP, либо с помощью специальных инструментов, таких как fail2ban.

0

PHP может получать данные через POST или GET из вашего сайта и даже через интернет-браузер. Один из методов, используемых для этого, - curl.

К чему вы относитесь к этому вопросу, называется Cross-site request forgery.

Если вы в состоянии, вы должны реализовать использование HTTPS в своем приложении, и это может решить многие проблемы безопасности.

В случае, если вы не можете использовать HTTPS (является ли это дорого или любой другой проблемой):

Вы должны проверить информацию, полученную с помощью POST или GET в вашем PHP, этот языке имеет много возможностей для решения этих "проблемы"; Взгляните на это part официального представителя PHP documentation.

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

И, если вы хотите, чтобы получить IP-адрес ваших посетителей:

function getRealIpAddr() 
{ 
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet 
    { 
     $ip=$_SERVER['HTTP_CLIENT_IP']; 
    } 
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //to check ip is pass from proxy 
    { 
     $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; 
    } 
    else 
    { 
     $ip=$_SERVER['REMOTE_ADDR']; 
    } 
    return $ip; 
} 

Наконец, читайте this.

EDIT

Если вы не можете оплатить сертификат HTTPS, (как Halim Qarroum говорит), вы можете использовать:

Self signed SSL certificates, , которые являются бесплатными. Конечно, это имеет свои преимущества и недостатки.

+0

Если он не использует защищенное соединение «HTTPS», передача данных в ящике может быть потенциально прочитана любым телом по разным типам атак. Если злоумышленник может прочитать, какие данные будут отправлены в его API, он может воспроизвести перехваченный запрос, чтобы веб-служба считала его фактическим приложением для Android. –

+1

Он не спрашивал, как предотвратить эту атаку, просто заметил, что использование HTTPS может решить многие проблемы безопасности, о которых вы только что упоминали. Если он не может оплатить соединение https, он может делать то, о чем я говорил, если он может заплатить, то это решит многие проблемы. –

+0

HTTPS - это не вопрос стоимости. Сторонние подписанные сертификаты могут быть дорогими, но ничто не мешает вам использовать самоподписанные сертификаты в этом случае. Кроме того, он задал вопрос о том, как предотвратить несанкционированный доступ к его службе: «Мой вопрос в том, как я могу предотвратить несанкционированные пользователи, использующие мой веб-сервис?». –