Недавно я закончил оценку безопасности с командой, создающей мобильное приложение с использованием Meteor.

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

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

Раскрытие пакета

Ранее мы говорили о том, как потенциальный злоумышленник (или эксперт по безопасности) может извлечь URL-адрес сервера приложения Meteor из скомпилированного мобильного приложения.

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

Но что, если вы завернете весь интерфейс в защиту Meteor.isCordova:

Meteor.startup(() => {
  if (Meteor.isCordova) {
    render(renderRoutes(), document.getElementById('app'));
  }
});

Разве это не помешает злоумышленнику получить доступ к приложению в своем браузере, что фактически сделает ваше приложение «только мобильным»?

Помещение вашего приложения в защиту Meteor.isCordova изначально не позволит потенциальному злоумышленнику увидеть пользовательский интерфейс вашего приложения. Однако они по-прежнему смогут открывать свою консоль и взаимодействовать с объектом Meteor вашего приложения.

Они по-прежнему могут проверять методы на стороне клиента, взаимодействовать с Minimongo, вызывать методы на стороне сервера и подписываться на публикации.

Кроме того, любопытный пользователь может также просмотреть исходный код вашего приложения и погрузиться в пакет Javascript, созданный в процессе сборки Meteor. Оттуда они могут просматривать весь код, используемый для отображения вашего пользовательского интерфейса, уделяя особое внимание вызовам методов, подпискам и т. д.

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

Невозможно запретить мотивированному пользователю взаимодействовать с вашим приложением Meteor из своего браузера.

Последние мысли

Битва за безопасность Meteor (и безопасность всех веб-приложений) ведется на сервере. Любые меры предосторожности на стороне клиента, введенные в приложение, могут быть легко обойдены мотивированным пользователем.

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

В конце концов, единственный реальный контроль над вашим приложением существует на сервере.

Обязательно найдите время для защиты своих методов, публикаций и маршрутов на стороне сервера.