Android JavascriptInterface устраняет уязвимость ниже api 17
У меня есть приложение, которое работает как браузер и отображает результаты в Android WebView. Среди них некоторые результаты отображаются на моем собственном сервере и используют объект javascriptInterface для вызова методов Java.
Внутри метода WebviewClient shouldOverrideUrlLoading() я добавил javascriptInterface только для отдельных URL-адресов моего сервера и удалил javascriptInterface для остальных URL-адресов, как показано в коде ниже: if(url.contains("mypage1.html")||url.contains("mypage2.html")){
webView.addJavascriptInterface(new JavaScriptInterface(),"XYZ");
}
else {
webView.removeJavascriptInterface("XYZ");
}
Пустой URL myevilpage.html, содержащий злой javascript, также загружается вместе с mypage1.html и mypage2.html. Я убедился, что myevilpage.html javascript не может вызывать методы Java.
Является ли этот подход нормальным для обеспечения того, чтобы никакие другие URL-адреса, кроме моих конкретных, не могли связываться с использованием моста javascriptInterface?
Я уже ссылался на следующие ссылки:
http://www.rapid7.com/db/modules/exploit/android/browser/webview_addjavascriptinterface
Приложение для Android с использованием Webview / javascript. в чем может быть проблема безопасности?
Android JavascriptInterface Security?
1 ответ
Является ли этот подход нормальным для обеспечения того, чтобы никакие другие URL-адреса, кроме моих конкретных URL-адресов, не могли связываться с использованием моста javascriptInterface?
Вы используете contains()
и не equals()
Таким образом, злоумышленник может легко создать URL-адрес, в котором есть эти подстроки. Кроме того, могут возникнуть проблемы с синхронизацией, так как вы определяете доступность интерфейса JS до загрузки этой страницы, что означает, что вы сразу же воздействуете на загруженную в данный момент страницу.
По-прежнему возможны другие атаки (например, прокси-серверы, вредоносные JS, обслуживаемые этими страницами через рекламные сети или другие сторонние источники), которые обнаружение URL-адресов не поймает, хотя в лучшем случае их устранение будет затруднено.