Вопрос по javascript, text, xss – Как получить доступ к текстовому контенту, полученному с помощью <script type = «text / plain» src =…> в JavaScript?

18

Когда используешьгде URL относится к текстовому файлу, есть ли способ получить доступ к содержимому файла в JavaScript? Файл передается в браузер, но значениеinnerHTML собственностьscript элемент не изменяется (остается пустой строкой). Проверка узла элемента в DOM, по-видимому, не обнаруживает какого-либо свойства, с помощью которого можно найти полученное содержимое.

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

предположим, что выожидаете загрузки всего содержимого, а затем пытаетесь Mutahhir
Я думаю, что браузеры несохранить содержание(кроме, возможно, в браузерекеш на некоторое время), После того, как скрипт был оценен, источник неЭто больше не нужно, так что это просто пустая трата памяти. I Hate Lazy
Интересно, что хром не делаетдаже не загружать внешние ресурсы сценариев с атрибутом type, являющимся любым типом MIME, который не должен интерпретироваться как сценарий, как указано здесь [w3.org/TR/html5/the-script-element.html#scriptingLanguages] тогда интересно, зачем все это делать [w3.org/TR/html5/... toofast1227

Ваш Ответ

4   ответа
0

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

Я попробовал несколько вариантов, и они нет работа. Я неУ тебя нет веской причины, почему ты выиграля не могу найти его, но причина, почему яЯ сдаюсь / думать так, потому что даже инспектор WebKit, что яЯ использую нерядом с тегом script-src не должно быть раскрытия треугольника. Что он делает, так это то, что он конвертирует src в ссылку, по которой вы можете щелкнуть, и затем он использует Ajax или что-то еще для чтения этого текста с сервера.

4

ько ссылок на следующий код:



  <script type="text/javascript">
    function init() {
      var extText = window.frames.messageTxt.document.body.lastChild.lastChild.data;
      extText = extText.replace(/[\r\n]/g, " ");
      document.forms[0].nMessage.value = extText;
    }
    window.onload = init;
  </script>


  <iframe name="messageTxt" src="txtData.txt" style="display:none"></iframe>
  <form>
    <textarea name="nMessage"></textarea>
    <input type="button" value="click" onclick="init()">
  </form>


Приведенный выше код действительно обращается к файлу txtData.txt (при условии, что он существует) и выгружает его в</code> как текст по умолчанию. По какой-то причине ни в одном из приведенных выше ответов не упоминается, что это работает, я полагаю, потому что вопрос, по-видимому, подразумевает<code><src></code> пометка конкретно (для подобной техники может быть недоступна; я не проверял); однако, я все еще думаю, что стоит упомянуть, что ваш запрос относится к более общему вопросу получения внешнего файла .txt (или если кто-то, кто сталкивается с этой страницей, ищет указанный вопрос 's anwser), главным образом потому, что я потратил много времени на его изучение, поэтому я считаю правдоподобным, что ответ был просто трудным.</p>

Вы правы, мой вопрос отражает более общую проблему, и использованиеiframe это интересный подход к этому (хотя он не работает в Chrome для локальных файлов, и обычно на него распространяются ограничения по происхождению - по сути, этоэто как «Аякс лайт » с встраиванием HTML). НазначениеextText самый важный код здесьдля получения текстового контента, остальное зависит от того, что мы хотим с ним делать. Jukka K. Korpela
10

textатрибутHTMLScriptElement является предпочтительным методом для доступа к тексту встроенного элемент.DOM-Level-2 а такжеHTML5: 4.11.1 оба указывают, что скрипт должен иметь атрибутtext который содержит сценарии интерьератекст:

Атрибут IDLtext должен вернуть конкатенацию содержимого всех узлов Text, которые являются потомкамиscript элемент (игнорируя любые другие узлы, такие как комментарии или элементы), в древовидном порядке. При настройке он должен действовать так же, какtextContent Атрибут IDL.

Поскольку элемент пуст (вы указали внешний источник),texttextContent а такжеinnerHTML пусты Это потому чтоtext атрибут устанавливается только в встроенных скриптах:

Если скрипт встроенный и блок скриптовТип s - это текстовый язык:

Значениеtext Атрибут IDL в то время, когда элемент "уже начали" Флаг был последний установлен является источником сценария.

Так что'невозможно включить внешнийtext/plain используя этот метод.

Смотрите также:

W3C: HTML5: 4.11.1 Элемент script: атрибут text и пример для игровой карты:
 
 
........U.........e
o............A....e
.....A.....AAA....e
.A..AAA...AAAAA...e

Это звучит убедительно. Это не доказывает, что нет никакого доступа к загруженному контенту, но делает это очень вероятным. И, как упоминает @toofast, Chrome даже не загружает его. Jukka K. Korpela
6

что если бы это было поддержано, это обеспечило бы огромную дыру в безопасности и средство для обхода межсайтовых сценариев защиты, которые защищают json и другие данные. По сути, моя грязная веб-страница (скажем, nasty.com) может получить доступ к вашим личным данным, которыеs защищены куки, загрузив его с помощью тега script. например

<script type="text/plain" src="https://supersecure.com/youraccount/privatedocs/list">
</code></pre><p>Поскольку файлы cookie для supersecure.com будут автоматически отправляться вместе с запросом (как в случае запроса каких-либо ресурсов), защищенный сайт просто возвращает данные (например, список личных документов), поскольку он не можетЛегко отличить запрос от запроса AJAX с его законной веб-страницы. Эта дыра неСуществует с ajax, так как браузер просто запретит странице nasty.com отправлять запросы ajax на supersecure.com, благодаря той же политике происхождения.</p><p>Очевидно, чтоНет проблем с безопасностью встроенных данных.</p></script>

Похожие вопросы