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

ссылка на внешний файл JavaScript,

<script type="text/javascript" src="js/jquery-1.4.4.min.js"></script>

источник JavaScript (строки кода перед интерпретацией) доступен из DOM или контекста окна на текущей странице HTML? Я имею в виду использование только стандартного JavaScript без каких-либо установленных компонентов или инструментов.

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

Ответы на вопрос(2)

<script> пометить и повторно запросить файл JSXMLHttpRequest, он, скорее всего, будет легко обслуживаться из кэша и с учетными данными текущей страницы. Но если ваш запрашивающий скрипт и скрипт в теге происходят из одного домена, браузер не допустит этого.

Решение Вопроса

<script> теги. На самом деле это не недосмотр, а скорее функция безопасности: предположим, я запрашиваю.json файл, который Gmail запрашивает через AJAX, чтобы загрузить входящие, поместив его во внешний<script> тег. Документ JSON является допустимым Javascript (предоставляется без побочных эффектов), поэтому он будет работать без ошибок. Затем, если бы я мог проверить содержимое внешнего скрипта, я смог бы прочитать вашу электронную почту. (Я почти уверен, что Gmail является более сложным, но большинство сайтов не так.)

Итак, несколько слов о том, как работает Gmail, и вот как будет выглядеть атака:

<script id="inbox" type="text/javascript" src="http://mail.google.com/OMGYOURINBOX.json"></script>

<script type="text/javascript">
// Supposing a value called `externalScriptContent` existed on a script tag:
var inboxJSON = document.getElementById('inbox').externalScriptContent;
var messages = JSON.parse(inboxJSON);
for(var i in messages) {
  // Do something malicious with each e-mail message
  alert(messages[i].body);
}
</script>

Если тег сценария имеет значениеexternalScriptContentЯ мог бы просто вставить любой URL дляsrc что я хотел, а затем суммировать содержимое удаленного файла, эффективно обходя ограничения AJAX для разных источников. Это было бы плохо. Мы разрешаем перекрестные запросы для удаленных сценариев, потому что они выполняются и выполняются только. Они не могут быть прочитаны.

Firebug имеет эти разрешения, потому что расширения Firefox имеют возможность проверять все, что запрашивает браузер; нормальных страниц, к счастью, нет.

Тем не мение! Имейте в виду, что, если скрипт находится в вашем домене, вместо того, чтобы писать его в<script src="…"></script> форма, вы можете получить его с помощью запроса AJAX тогдаeval чтобы иметь доступ к содержимому и по-прежнему запрашивать его только один раз :)

 Matchu09 янв. 2011 г., 01:20
@John K: на запросы AJAX распространяются требования к разрешениям разных источников, но обращения к внешним файлам сценариев через<script src="…"></script> не. Если бы я был в состоянии проверить содержимое внешнего скрипта, вызванного через<script src="…"></script>тогда я мог бы просто положить все, что хотелsrc, прочитайте это, и эффективно обойдите те перекрестные ограничения происхождения. Причина того, что<script src="…"></script> не подпадает под эти требования то, что файл запускается и работает только; это не может быть прочитано. Я только что поймал свою вводящую в заблуждение фразу в своем ответе, тем не менее, так отредактировано :)
 John K09 янв. 2011 г., 01:08
Если вы можете запросить скрипт .json, который публикует Gmail, вы прочли мое письмо независимо от того, доступен ли источник для проверки, не так ли? Аутентификация - это механизм, который предотвращает эту ситуацию. Вероятно, я не понимаю предложенную теоретическую ситуацию.
 Matchu09 янв. 2011 г., 01:30
@John: Добавил важную заметку в конец :)
 John K09 янв. 2011 г., 01:25
Спасибо за разъяснения.

Ваш ответ на вопрос