Таким образом, код, который запускается в WebView, по умолчанию находится в изолированной программной среде, то есть он не может выполнять опасные нативные вещи, такие как запись в файловую систему или доступ к адресной книге и т. Д. *
Большинство javaScriptпопадает в эту категорию, и в случае показа пользовательского диалогового окна нет никакой опасности.
addJavaScriptInterface позволяет вам выставлять нативные вещи телефона в javascript, и опасность состоит в том, что если вы не напишите свой javaScriptInterface правильно, вы могли быв итоге подвергаем телефон человека реальной опасности от хакера.
Я думаю, что проще всего понять на примере.
Скажем, вы пишете интерфейс javaScript, где вы можете вызывать функцию из javaScript, котораязаписывает файл в путь в файловой системе Android.Например:
writeToFile(data, safepath);
Все javascript поступают с вашего сервера, но каким-то образом хакер скомпрометировал ваш сервер и изменил HTML / JavaScript, загружаемый в ваш WebView, для запуска:
writeToFile(dangerousdata, pathtosomeotherfile);
СейчасЯ недостаточно хорошо изучил компоновку пакета Android, чтобы понять, какой файл я бы хотел перезаписать / изменить, если бы я был хакером, но у нас было немного хакерских битв с друзьями на наших собственных Linux-машинах, когда я был моложеи вы будете использовать такой вызов, чтобы перезаписать что-то вроде двоичного файла SSH - тогда вы сможете регистрировать все пароли, которые будут входить. Если бы вы могли делать такие вещи, как перезапись или расширять исходный apk своим собственным, вы могли бы включитьтелефон этого человека на сервер, на который вы могли бы войти удаленно (я не уверен, возможно ли это из-за того, что приложения помещаются в «песочницу»).Даже если все, что вы могли бы сделать, это перезаписать файл с критическими данными, вы могли бы заставить пользователя предоставить вам (в данном случае хакеру) доступ к учетным данным безопасности, паролям и тому подобному.
Много лет назад мы обнаружили дыру в процессе sendmail на машине с Linux, которая позволила нам запустить оболочку.Мы вошли на наш сервер как пользователь почты.Вы не можете сделать что-то большее, чем пользователь почты, но как только вы окажетесь на машине, это даст вам возможность осмотреть другие недостатки.
Так что вы можете делать то, что вы хотите делать безопасно, просто будьте уверены,что вы делаете этот интерфейс JavaScript действительно простым и тупым - он записывает только один файл в одном месте, а записываемые вами данные могут быть текстовыми или что-то, что не будет интерпретировано позже.Для диалогов я делаю это все время - никаких особых нативных вызовов тоже не нужно.Это отличный способ создать страницу, которую можно обновить после того, как пользователь установил ваше приложение.
Надеюсь, это полезно!