Как я могу убедиться, что файл попадает с телефона на сервер без вмешательства? - PullRequest
3 голосов
/ 28 февраля 2011

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

Ответы [ 6 ]

6 голосов
/ 28 февраля 2011

Вам в значительной степени не повезло, поскольку приложение запускается пользователем, а вывод контролируется пользователем.Единственный способ получить контроль над системой пользователя, чтобы он не мог ее контролировать, - это использовать доверенные вычисления со всеми этическими и философскими последствиями - см., Например. Можете ли вы доверять своему компьютеру? Ричард Столлман.Единственное, на что вы можете надеяться, это иметь безопасное соединение между вашим сервером и пользовательскими системами (SSL / TLS), но это все еще пользовательская система, над которой вы не можете контролировать.

4 голосов
/ 28 февраля 2011

Единственный правильный ответ здесь - это Зед.

Остальные ответы основаны на Безопасность через мрак .

Суть в следующем: если устройство не полностью заблокировано (= доверенные вычисления), тогда пользователи могут выполнить реинжиниринг приложения / формата файла / сетевого протокола и представить ложные данные.

Факт жизни: люди с огромными ресурсами (медиаиндустрия, IT индустрия) пытались это осуществить (DVD, BluRay, игровые приставки и т. Д.), Но в конце концов талантливые инженеры с минимальным бюджетом смогли сломать эту защиту схем.

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

1 голос
/ 28 февраля 2011

Что вы можете сделать:

  • Подпишите файл приложением
  • Проверьте подпись на сервере, проверьте, является ли сертификат авторизованным

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

Другая идея: вы можете вычислить данные или они генерируются пользователем?Если он вычисляется, почему бы просто не вычислить данные и не отправить их на сервер (через SSL), даже не записав их в файловую систему?

1 голос
/ 28 февраля 2011

Как и в случае с Android, вы не можете запретить людям доступ к файлам в общедоступной файловой системе.

Может быть, есть более эффективные способы справиться с этим, но я бы просто зашифровал и расшифровал данные перед отправкой, и с помощью ключевой фразы или какой-либо проверки на четность можно было бы проверить данные.

1 голос
/ 28 февраля 2011

Есть несколько подходов, которые вы можете использовать здесь:

  1. Зашифровав файл перед его сохранением на устройстве, пользователь не сможет его прочитать / изменить.
  2. Шифрование соединения с сервером, SSL может защитить от вмешательства третьей стороны.
  3. Не сохраняйте файл в общедоступном месте, поместите его в личный каталог данных вашего приложения. Пользователь не сможет получить к нему доступ.

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

1 голос
/ 28 февраля 2011

Некоторые грубые идеи:

Вы можете просмотреть информацию, отправляемую на сервер пользователю, и затем предварительно отправить ZIP-файл, который отправляется с паролем, чтобы у пользователя не было возможности отредактировать его:

Написать защищенный паролем Zip-файл на Java

Конечно, вам нужно убедиться, что пользователь не знает пароль ...

Или вы можете создать контрольную сумму отправленного текста и проверить контрольную сумму на сервере. Здесь, опять же, вы должны убедиться, что пользователь не знает, как построена контрольная сумма, и соответственно изменить ее.

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

Будь то пароль или контрольная сумма, вы можете отправить эту информацию на ваш сервер с помощью обычного HTTP-запроса, чтобы он не был "видимым" для пользователя (за которым следует второй запрос, который фактически отправляет файл), но если мы говорим о пользователях, которые знают, как обращаться с сетевыми снифферами на своем телефоне (нужен root, AFAIK), вам не повезет, ведь именно их устройство и их данные все-таки пытаются его покинуть:)
Вы можете попытаться использовать безопасное соединение, чтобы исправить это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...