Почему возможно использование междоменных скриптов для локальных файлов на мобильном устройстве?

Что я сделал:

Я создал index.html с xss.js, который вызывает функцию jQuery.get (). Затем я открыл index.html в браузере (Firefox, Chrome, IE и Opera) и попытался вызвать запрос ajax.

Код

Вот мой index.html:

<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>XSS</title> <script src="libs/js/jquery-1.7.2.js" ></script> </head> <body> <button id="request" >fire</button> <script src="libs/js/xss.js" ></script> </body> </html> 

И мой xss.js:

 function init() { $('#request').click(loadContent); } function loadContent() { $.get('http://www.example.com/', null, function(data){ alert('success'); $('body').html(data); }, 'html'); } init(); 

Если я открою index.html в браузере ( file:///C:/workspace/xss%20test/index.html ), после нажатия кнопки получаю следующие ответы:

  • Firefox : нет кода ошибки ( HTTP/1.1 200 OK ), но ответ пуст

  • IE : нет ответа

  • Chrome : XMLHttpRequest cannot load http://www.example.com/. Origin null is not allowed by Access-Control-Allow-Origin. XMLHttpRequest cannot load http://www.example.com/. Origin null is not allowed by Access-Control-Allow-Origin.

  • Opera : нет кода ошибки ( HTTP/1.1 200 OK ) и полного html-файла в качестве ответа, но ничего не будет отображаться (обратный вызов успеха не запускается)

Этот код загрузит index.html в мой Android WebView:

 public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); WebView webview = (WebView) findViewById(R.id.webview); webview.getSettings().setJavaScriptEnabled(true); webview.setWebChromeClient(new WebChromeClient()); webview.setWebViewClient(new WebViewClient()); webview.loadUrl("file:///android_asset/www/index.html"); } } 

Вызывает обратный вызов успеха, а также отображает содержимое www.example.com в теле моего файла index.html после index.html кнопки.

(То же самое возможно на устройствах iPhone – я не тестировал это на устройствах Windows Phone) .

Tl; dr – Вопрос:

Почему можно загружать контент с удаленного сервера на мое мобильное устройство – разве это не сценарий междоменного скрипта, или я чего-то не хватает?

Из-за ограничений безопасности браузера большинство запросов «Ajax» подчиняются одной и той же политике происхождения; Запрос не может успешно извлекать данные из другого домена, субдомена или протокола.

Также: Почему Opera получает ответ, но ничего не отображает?

Заранее спасибо.

На самом деле ваш код не работает в мобильных браузерах, включая ICS и Chrome на Android, а также Safari на iPhone. Однако то, что вы показали, не загружает html-файл в браузере – он загружает его в WebView – совсем другое животное.

WebView или Webkit – это просто виджет пользовательского интерфейса, который реализует функции, подобные браузерам. Они не браузеры. Они не предоставляют такие вещи, как обычный браузер Chrome, и по умолчанию у них очень либеральные модели безопасности по сравнению с браузерами. Хотя вы можете добавить код для реализации таких вещей, как политика с одним и тем же источником и т. Д., Если хотите.

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

Я считаю, что причиной этого является то, что WebViews и Webkits предполагается использовать для отображения контента, на который вы контролируете 100%. В отличие от браузеров, где пользователи могут вводить любой URL-адрес в адресной строке. Поэтому вам решать ветеринарную погоду, что вы загружаете, безопасны или нет.

Intereting Posts
Можем ли мы показать номер значка на значке приложения Android, например iphone? Установить размер камеры – параметры против намерения? Android terminal – telnet отсутствует команды, получая эту ошибку: KO: неизвестная команда, попробуйте 'help' Предоставьте разрешение на использование андроида для подключения к «непроверенному серверу» Есть ли ярлык для открытия файлов макета (.xml) в студии Android? Сервер NanoHttpd не может передавать большие видео на андроид Невозможно переписать учетные данные Facebook после выхода из системы Как устранить ошибку «Ошибка чтения подписанного контента.» При установке ADT 23.0.2 в Eclipse 4.4 на OSX Анализ синтаксиса Android по времени с помощью SimpleDateFormat Отображать немощную веб-страницу на Android при собственном разрешении? Android Intents – putExtra, что происходит с несколькими встречами? Push-уведомление при запуске приложения Android.database.sqlite.SQLiteException: не удается понизить базу данных с 58 до 55 для базы данных Android ParseSdkContent failed Не удалось инициализировать класс android.graphics.Typeface Как создать резервную копию / восстановление базы данных SQLite на Android в Dropbox