Как проверить с сервера, что клиентский код не был изменен - PullRequest
2 голосов
/ 28 июня 2011

У меня есть Java-сервер, который общается с Java-клиентом через json-rpc. Клиент должен сообщать внутреннюю статистику серверу, который изменяет поведение сервера. Как клиентские, так и серверные компоненты написаны дома, поэтому я могу контролировать, что делает клиент и как он сообщает статистику, но есть ли способ проверить, что код клиента не был изменен? Если он есть, он все равно будет обслуживать клиента, но с использованием некоторых поведений по умолчанию.

Клиенты будут общедоступны, поэтому для них нет ничего сложного в том, чтобы кто-то декомпилировал их и изменил поведение.

Просто отправлять клиенту сигнатуру кода бесполезно, поскольку ее можно легко подделать, сохранив оригинальную копию клиента вместе с измененной.

Ответы [ 3 ]

4 голосов
/ 28 июня 2011

Вы не можете. По сути, у вас нет возможности узнать, какой код выполняется на клиенте, и ни одна из программной логики не должна полагаться на то, что клиент считается «доверенным». Все управление доступом, проверка и т. Д. Должны выполняться на сервере (или в обоих местах).

Определенные специализированные среды (например, код, встроенный в смарт-карту, или устройства, такие как игровые приставки, ОС которых предназначена только для запуска подписанного кода), дают вам немного больше гарантии из-за возрастающей сложности обратного проектирования / получения соответствующего управление устройством. Но даже они не являются безошибочными (посмотрите на iPhone или любую консоль и посмотрите, сколько времени понадобилось для «взлома» устройств по сравнению с интересом к этому, чтобы дать вам представление об уровне безопасности).

0 голосов
/ 28 июня 2011

Первое, что приходит на ум, - это чтобы клиент отправил как файл подписи (внутри кода), так и сам хэш.

Но, как вы говорите, он может быть подделан.

Если вы пытаетесь полагаться на подлинность клиента, чтобы делать что-то на сервере: не делайте! Переосмыслите свою логику.Если это просто дополнительная мера безопасности (используйте ее).

0 голосов
/ 28 июня 2011

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

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

Клиент должен просто вызвать логику, а не отправлять ее на сервер.

...