Czy są takie same jak XML, być może plus spacja jeden (
)?
Znalazłem kilka ogromnych list znaków ucieczki HTML, ale nie sądzę, że trzeba ich unikać . Chcę wiedzieć, co trzeba uciec.
Czy są takie same jak XML, być może plus spacja jeden (
)?
Znalazłem kilka ogromnych list znaków ucieczki HTML, ale nie sądzę, że trzeba ich unikać . Chcę wiedzieć, co trzeba uciec.
Jeśli wstawiasz treść tekstową w dokumencie w miejscu, w którym spodziewana jest treść tekstowa 1 , zwykle potrzebujesz tylko tych samych znaków, co w XML . Wewnątrz elementu obejmuje to tylko znak ucieczki bytu &
i ogranicznik elementu znaki mniejsze niż i większe niż <
>
:
& becomes &
< becomes <
> becomes >
Wewnątrz wartości atrybutów musisz także uciec od znaku cudzysłowu, którego używasz:
" becomes "
' becomes '
W niektórych przypadkach może być bezpiecznie pominąć ucieczkę przed niektórymi z tych postaci, ale zachęcam do ucieczki ze wszystkich pięciu we wszystkich przypadkach, aby zmniejszyć ryzyko pomyłki.
Jeśli kodowanie dokumentu nie obsługuje wszystkich używanych znaków, na przykład jeśli próbujesz użyć emoji w dokumencie zakodowanym w formacie ASCII, musisz również je uciec. Większość dokumentów w tych dniach jest kodowana przy użyciu kodowania UTF-8 w pełni obsługującego Unicode, o ile nie będzie to konieczne.
Zasadniczo nie powinieneś uciekać przed spacjami jak
.
to nie jest normalna przestrzeń, to przestrzeń niezniszczalna . Możesz użyć ich zamiast zwykłych spacji, aby zapobiec wstawianiu linii między dwoma słowami lub wstawić dodatkową spację bez automatycznego zwinięcia, ale jest to zwykle rzadki przypadek. Nie rób tego, chyba że masz ograniczenia projektowe, które tego wymagają.
1 Przez „lokalizację, w której spodziewana jest treść tekstowa”, mam na myśli wnętrze elementu lub wartości atrybutu cytowanego, w których obowiązują normalne reguły analizy. Na przykład: <p>HERE</p>
lub <p title="HERE">...</p>
. To, co napisałem powyżej , nie dotyczy treści, które mają specjalne reguły analizowania lub znaczenie, takie jak wewnątrz skryptu lub znacznika stylu, lub jako nazwa elementu lub atrybutu. Na przykład: <NOT-HERE>...</NOT-HERE>
, <script>NOT-HERE</script>
, <style>NOT-HERE</script>
, lub <p NOT-HERE="...">...</p>
.
W tych kontekstach reguły są bardziej skomplikowane i znacznie łatwiej jest wprowadzić lukę w zabezpieczeniach. Zdecydowanie odradzam wam wstawianie dynamicznych treści w dowolne z tych lokalizacji. Widziałem zespoły kompetentnych, świadomych bezpieczeństwa programistów, wprowadzających luki w zabezpieczeniach, zakładając, że poprawnie zakodowali te wartości, ale brakuje im marginalnego przypadku. Zwykle istnieje bezpieczniejsza alternatywa, taka jak umieszczenie wartości dynamicznej w atrybucie, a następnie obsługa jej za pomocą JavaScript.
Jeśli musisz, przeczytaj Zasady zapobiegania XSS Open Web Application Security Project, aby zrozumieć niektóre z obaw, o których należy pamiętać.
<p onclick="NOT-HERE">...</p>
i<p style="NOT-HERE">...</p>
.To zależy od kontekstu. Niektóre możliwe konteksty w HTML:
Zobacz sekcję OWASP dotyczącą zapobiegania skryptom między witrynami , zwłaszcza sekcje „ Dlaczego nie mogę po prostu encji HTML zakodować niezaufanych danych? ” I „ Zasady zapobiegania XSS ”. Jednak najlepiej przeczytać cały dokument.
źródło
Zasadniczo istnieją trzy główne znaki, które zawsze powinny być poprzedzane znakami ucieczki w plikach HTML i XML, więc nie wchodzą one w interakcję z resztą znaczników, więc jak można się spodziewać, dwa z nich będą opakowaniami składni, które są < >, są one wymienione poniżej:
Możemy również użyć podwójnego cudzysłowu („) jako”, a pojedynczego cudzysłowu (') jako & apos
Unikaj umieszczania treści dynamicznych w
<script>
i<style>
. Te zasady nie są dla nich stosowane. Na przykład, jeśli musisz dołączyć JSON do a, zamień <na \ x3c, znak U + 2028 na \ u2028, a U + 2029 na \ u2029 po serializacji JSON).Znaki ucieczki HTML: pełna lista: http://www.theukwebdesigncompany.com/articles/entity-escape-characters.php
Musisz więc uciec <lub, po którym następuje cokolwiek, co mogłoby rozpocząć odniesienie do postaci. Również reguła na znakach handlowych jest jedyną taką regułą dla atrybutów cytowanych, ponieważ pasujący znak cudzysłowu jest jedyną rzeczą, która ją zakończy. Ale jeśli nie chcesz tam kończyć wartości atrybutu, unikaj cudzysłowu.
źródło
Dokładna odpowiedź zależy od kontekstu. Zasadniczo znaki te nie mogą być obecne ( HTML 5.2 §3.2.4.2.5 ):
Ograniczenia te są rozproszone w specyfikacji. Np. Wartości atrybutów ( pkt 8.1.2.3 ) nie mogą zawierać niejednoznacznych znaków ampersand i muszą być (i) puste, (ii) w pojedynczych cudzysłowach (a zatem nie mogą zawierać znaku U + 0027 APOSTROPHE
'
), (iii) w podwójnych cudzysłowach ( nie może zawierać znaku U + 0022 QUOTATION MARK"
) lub (iv) bez cudzysłowu - z następującymi ograniczeniami:źródło