Веб-сервис C# и приложение для Android: как предотвратить незаконный доступ

Я использую (с удовлетворением) некоторые веб-сервисы из приложения для Android.

Я использую https (я купил SSL-сертификат).

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

Я использую «секретный ключ», который приложение должно предоставить методу веб-службы, но он хранится в постоянной переменной внутри кода, и я знаю, что это не лучшее решение для обеспечения безопасности.

Вызов веб-службы Android (с использованием ksoap):

try {
    SoapObject request = new SoapObject(configuration.getNamespace(), methodName);

    request.addProperty("securityKey", SECURITY_KEY);

Веб-служба C#

[WebMethod]
public string UserRegistraion(string securityKey, string data)
{
    if (securityKey != Environment.SecurityKey)
    {
        return "WRONG_KEY";
    }

Каков наилучший способ достижения окончательного решения?

ИЗМЕНИТЬ:

Как кто-то предложил, я задал тот же вопрос и на security.stackexchange.com.

https://security.stackexchange.com/questions/30850/web-services-how-prevent-illegal-accesses


person Seraphim's    schedule 13.02.2013    source источник
comment
Вы можете использовать алгоритм генерации динамического ключа, который известен как стороне клиента/сервера, так и перед любой связью клиент-сервер должен согласовать динамический ключ (а не статический ключ). Чтобы сделать ваш алгоритм динамической генерации ключей безопасным, вы можете попытаться запутать исходный код с помощью Proguard перед публикацией приложения.   -  person Gaurav Arora    schedule 13.02.2013
comment
@GauravArora, конечно, но, как вы сказали, это просто какая-то хитрая запутанность. Если кто-то декомпилирует свое приложение и ищет эту генерацию динамического ключа, он все равно сможет получить доступ.   -  person Rafael T    schedule 13.02.2013
comment
Да, я согласен. Это не похоже на окончательное решение, которое я ищу. И да, решение, предложенное Гауравом, лучше моего.   -  person Seraphim's    schedule 13.02.2013
comment
Есть ли в вашем приложении какая-либо форма аутентификации? Вы рассматривали oAuth?   -  person Brian P    schedule 13.02.2013
comment
Не лучше ли ответить на этот вопрос на security.stackexchange.com?   -  person James Snell    schedule 13.02.2013
comment
возможно, но мне интересно, есть ли у Android (ksoap)/С# стандартный механизм для достижения решения...   -  person Seraphim's    schedule 13.02.2013
comment
@ Брайан П. Я не знаю oAuth, очень скоро попробую   -  person Seraphim's    schedule 13.02.2013


Ответы (1)


Вы просто не можете этого сделать. Вы должны запутать свой код. Это старая битва разработчиков программного обеспечения против взломщиков.

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

person greenboxal    schedule 13.02.2013