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=""asd">test</option>
<option value=""asd">test</option>
Jak renderować to na stronie, aby wiadomość postback zawierała prawidłową wartość?
6 answers
"
jest poprawny, trzeci z Twoich testów:
<option value=""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=""asd">Test</option>
</select>
Alternatywnie można rozgraniczyć wartość atrybutu pojedynczymi cudzysłowami:
<option value='"asd'>test</option>
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.
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=""asd">test</option>
<option value=""asd">test</option>
<option value='"asd'>test</option>
<option value='"asd'>test</option>
<option value='"asd'>test</option>
<option value="asd>test</option>
<option value="asd>test</option>
Zauważ, że jeśli używasz składni XML wymagane są cudzysłowy (pojedyncze lub podwójne).
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.
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
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
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