Как правильно избежать кавычек внутри атрибутов html?

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

Значение "asd, но в DOM всегда отображается пустая строка.

Я пробовал все, что знаю, чтобы избежать строки правильно, но безрезультатно.

<option value=""asd">test</option>
<option value="\"asd">test</option>
<option value="&quot;asd">test</option>
<option value="&#34;asd">test</option>

Любая идея, как сделать это на странице, чтобы сообщение postback содержало правильное значение?

Ответ 1

&quot; это правильный путь, третий из ваших тестов:

<option value="&quot;asd">test</option>

Вы можете увидеть, как это работает ниже, или на jsFiddle.

alert($("option")[0].value);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<select>
  <option value="&quot;asd">Test</option>
</select>

Ответ 3

Per синтаксис HTML и даже HTML5, следующие допустимые параметры:

<option value="&quot;asd">test</option>
<option value="&#34;asd">test</option>
<option value='"asd'>test</option>
<option value='&quot;asd'>test</option>
<option value='&#34;asd'>test</option>
<option value=&quot;asd>test</option>
<option value=&#34;asd>test</option>

Обратите внимание: если вы используете синтаксис XML, нужны кавычки (одиночные или двойные).

Здесь jsfiddle показывает все вышеперечисленные работы.

Ответ 4

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

<option value='"asd'>test</option>

Я упоминаю это:

<option value="'asd">test</option>

В моем случае я использовал это решение.

Ответ 5

Вы действительно должны разрешать только недоверенные данные в белый список хороших атрибутов: align, alink, alt, bgcolor, border, cellpadding, cellspacing, class, color, cols, colspan, coords, dir, face, height, hspace, ismap, lang, marginheight, marginwidth, multiple, nohref, noresize, noshade, nowrap, ref, rel, rev, rows, rowspan, scrolling, shape, span, summary, tabindex, title, usemap, valign, value, vlink, vspace, ширина

Вы действительно хотите сохранить ненадежные данные из обработчиков javascript, а также атрибуты идентификатора или имени (они могут clobber другие элементы в DOM).

Кроме того, если вы помещаете ненадежные данные в атрибут SRC или HREF, то это действительно ненадежный URL-адрес, поэтому вы должны проверить URL-адрес, убедитесь, что его НЕ является URL-адресом javascript: URL, а затем кодировкой HTML.

Подробнее о всех здесь: https://www.owasp.org/index.php/Abridged_XSS_Prevention_Cheat_Sheet