it-swarm.com.ru

Как правильно экранировать кавычки внутри атрибутов 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>

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

221
Chris

&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>

Кроме того, вы можете разделить значение атрибута одинарными кавычками:

<option value='"asd'>test</option>
299
Andy E

Если вы используете PHP, попробуйте вызвать функцию htmlentities или htmlspecialchars .

14
Lukasz Czerwinski

Для синтаксис 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, показывающий все вышеперечисленное .

9
aij

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

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

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

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

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

7
csonuryilmaz

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

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

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

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

0
Jim Manico