HTML Закодированные строки, распознаваемые движком javascript, как это возможно? - PullRequest
1 голос
/ 11 декабря 2010

Хорошо. Эта ночь была очень странной для меня. Извините, что создал новый вопрос после создания двух других вопросов ранее, но это еще один аргумент. Если я получу ответ здесь, я тоже получу ответ на эти вопросы, поэтому, пожалуйста, кто-нибудь выслушает меня и попытается понять.

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

this.MyTxtBox.Attributes["onfocus"] = "windows.alert('Hello World!');";

OK. Вы можете подумать, в чем проблема? Проблема в том, что ASP.NET 4.0 кодирует все, и я говорю все, чтобы избежать выполнения XSS на сайте. Ну, это может не показаться проблемой, но если вы посмотрите на визуализированную страницу, вы прыгните на стул, как я:

<textarea id="..." onfocus="windows.alert(&#39;Hello World!&#39;);"></textarea>

Как вы видите html, окончательный html немного странный ... движок JavaScript не должен принимать эту ситуацию. Итак, я начал эти вопросы:

Кодировка символов в кавычках ASP.NET вызывает проблемы при установке свойства элемента управления

Конфигурация кодировки Asp.Net

Ну, я до сих пор не получил никакого ответа ДА, мы не могли понять, какого черта необходимо изменить в конфигурации .net, чтобы не допустить такой ситуации.

Но теперь я считаю одну вещь одной важной: движок JavaScript работает! Даже с этим странным кодом, который не должен интерпретироваться ...

Я надеюсь, что все было ясно до сих пор ... Теперь возникает вопрос:

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

Если это правда, я должен предположить, что .net не предоставляет механизм, позволяющий избежать кодирования только по этой причине!

1 Ответ

8 голосов
/ 11 декабря 2010

Re:

<textarea id="..." onfocus="windows.alert(&#39;Hello World!&#39;);"></textarea>

В этом нет ничего странного (кроме того, что вы используете windows.alert вместо window.alert).Это должно работать нормально (и работает; пример ).Синтаксический анализатор HTML анализирует значения атрибутов HTML и обрабатывает такие объекты, как &#39;.Исходный код JavaScript, который он в конечном итоге передает интерпретатору JavaScript, будет содержать кавычки.Браузер не передает буквенные символы & # 3 9 ; интерпретатору JavaScript.

Это то же самое, что и:

<input type='text' value="This is a &#39;funny&#39; value too">

Анализатор HTML обрабатывает объекты и присваивает фактическое значениена вход This is a "funny" value too.

Кстати, именно поэтому этот, казалось бы, невинный HTML на самом деле неверен и не пройдет проверку (хотя большинство браузеров это допустят):

<a href='http://www.google.com/search?q=foo&hl=en'>Search for foo</a>

Точнее, это должно быть:

<a href='http://www.google.com/search?q=foo&amp;hl=en'>Search for foo</a>
<!--                                       ^^^^^--- difference here   -->

... потому что анализатор HTML анализирует значение, а затем присваивает результат parsed атрибуту href.И, конечно же, & вводит символьную сущность, и поэтому, чтобы буквально получить &, вы должны использовать &amp; везде в HTML.(Опять же, большинство браузеров позволяют вам сойти с рук, если то, что следует за &, не похоже на сущность. Но это может вас укусить.)

...