Jak prawidłowo uniknąć cudzysłowów wewnątrz atrybutów HTML?

Mam listę rozwijaną na stronie internetowej, która łamie się, gdy łańcuch wartości zawiera cudzysłów.

Wartością jest "asd, ale w DOM zawsze pojawia się jako pusty łańcuch.

Próbowałem wszystkiego, co znam, aby poprawnie uciec od sznurka, ale bezskutecznie.

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

Jak renderować to na stronie, aby wiadomość postback zawierała prawidłową wartość?

Author: Peter Mortensen, 2010-10-25

6 answers

&quot; jest poprawny, trzeci z Twoich testów:

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

Możesz zobaczyć to działanie poniżej, lub na 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>

Alternatywnie można rozgraniczyć wartość atrybutu pojedynczymi cudzysłowami:

<option value='"asd'>test</option>
 365
Author: Andy E,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-21 17:43:54

Jeśli używasz PHP, spróbuj wywołać htmlentities lub htmlspecialchars funkcja.

 22
Author: Lukasz Czerwinski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-13 12:36:03

Dla składni HTML , a nawet HTML5 , wszystkie ważne opcje są następujące:

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

Zauważ, że jeśli używasz składni XML wymagane są cudzysłowy (pojedyncze lub podwójne).

Oto jsfiddle pokazujące wszystkie powyższe działające.

 16
Author: aij,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-19 16:40:52

Inną opcją jest zastąpienie cudzysłowów podwójnych cudzysłowami pojedynczymi, jeśli nie masz nic przeciwko temu, co to jest. Ale o tym nie wspominam:

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

Wspominam o tym:

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

W moim przypadku użyłem tego rozwiązania.

 7
Author: csonuryilmaz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-27 09:00:39

Jeśli używasz Javascript i Lodash, możesz użyć _.escape(), która ucieka ",', i &.

Zobacz tutaj: https://lodash.com/docs/#escape

 2
Author: Andrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-11-14 23:33:42

Naprawdę powinieneś zezwalać tylko na niezaufane dane do białej listy dobrych atrybutów, takich jak: 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, Width

Naprawdę chcesz zachować niezaufane dane z javascript Handlery oraz atrybuty id lub name (mogą blokować inne elementy w DOM).

Ponadto, jeśli wprowadzasz niezaufane dane do atrybutu SRC lub HREF, to naprawdę jest to niezaufany URL, więc powinieneś zweryfikować adres URL, upewnij się, że nie jest to url javascript:, a następnie koduj encje HTML.

Więcej szczegółów na ten temat tutaj: https://www.owasp.org/index.php/Abridged_XSS_Prevention_Cheat_Sheet

 1
Author: Jim Manico,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-20 02:12:51