Jak i kiedy używać filter_xss () i check_plain ()?


11

Na views-view-fields--magazine--magazine.tpl.phpmojej stronie internetowej jest wiele takich plików szablonów . jak i kiedy powinienem użyć filter_xss () i check_plain (), aby poprawić bezpieczeństwo? na przykład jest to kod:

<div>
    <div class="bf-header bf-article-header"><?php print $fields['title']->content; ?></div>
    <div class="bf-article-body"><?php print $fields['field_magazine_body']->content;?></div>
    <div class="bf-article-image"><?php print $fields['field_magazine_image']->content;?></div>
</div>
<div class="separator article-view-separator"></div>

Jak mogę zastosować w nim te funkcje?


Użyj, filter_xss()gdy chcesz odfiltrować XSS przed potencjalnie niebezpieczną zawartością (tj. Treści od niezaufanego użytkownika) i check_plain()gdy chcesz uciec od znaków specjalnych HTML z łańcucha
Clive

Odpowiedzi:


13

Najpierw przeczytaj o nich w interfejsie API Drupal:

Tak więc check_plain()koduje znaki specjalne o specjalnym znaczeniu w HTML (takie jak <i &) w jednostkach czystego tekstu (tj. &lt;I &amp;odpowiednio), które sprawią, że będą one renderowane dosłownie (nie interpretowane jako HTML), gdy ten ciąg znaków zostanie następnie wyświetlony jako część strony z Znaczniki HTML. Ta funkcja filter_xss()filtruje ciąg HTML, aby zapobiec lukom w zabezpieczeniach XSS. Robi cztery rzeczy:

  • Usuwanie postaci i konstrukcji, które mogą oszukać przeglądarki
  • Upewnij się, że wszystkie jednostki HTML są poprawnie sformułowane
  • Upewnij się, że wszystkie tagi i atrybuty HTML są poprawnie sformułowane
  • Upewnienie się, że żadne tagi HTML nie zawierają adresów URL z niedozwolonym protokołem (np. Javascript :)

Obie funkcje służą do odkażania danych od użytkowników, aby upewnić się, że wstrzyknięcie przez użytkownika zostanie zneutralizowane przed wyrenderowaniem danych w witrynie.

Nigdy nie przepuszczasz tego samego ciągu przez oba .

Jeśli użyjesz, check_plain()ciąg przekazany do funkcji powinien być używany jako zwykły tekst (nie HTML). Wtedy filter_xss()nie jest potrzebne, ponieważ check_plain()zawsze spowoduje, że ciąg będzie zwykłym tekstem.

Jeśli użyjesz filter_xss(), to ciąg przekazany do funkcji ma być HTMLem i check_plain()zepsuje go.

Kiedy patrzę na szablon, którego używasz jako przykładu, wydaje mi się, że wszystkie trzy pola, które zostały przekazane, print()pochodzą z treści, która jest już oczyszczona i nie wymagają już żadnych warunków sanitarnych.

Jeśli jednak utworzysz własny moduł, który zbiera dane wejściowe od użytkownika bez przepuszczania go przez „bezpieczny” filtr tekstowy, taki jak „Filtrowany HTML” lub „Zwykły”, musisz użyć tych funkcji do celów sanitarnych.


Gdzie mogę sprawdzić, czy dane wejściowe pochodzą od użytkowników? na przykład istnieje typ zawartości i anonimowi użytkownicy mogą tworzyć tego rodzaju węzły.
M am D

@Drupalist, nigdy nie należy pozwalać użytkownikowi anonimowemu na używanie „niebezpiecznego” formatu tekstowego. Przejdź do Administracja »Konfiguracja» Tworzenie treści »Formaty tekstowe . „Bezpiecznymi” formatami tekstowymi dostarczanymi z Drupalem są „Filtrowany HTML” i „Zwykły tekst”. Jeśli są to jedyne formaty dozwolone dla użytkownika Anonimowego, Drupal wykonuje dla ciebie wymagane kontrole dla dowolnego wbudowanego typu węzła i każdego typu węzła, który tworzysz za pomocą podstawowej funkcji Fields . Jeśli Twój przypadek użycia różni się od tego, zadaj nowe pytanie, określając przypadek użycia.
Wolny radykalny

Anonimowi użytkownicy mogą korzystać tylkoplain text
M ama D

@Drupalist, w porządku. Nie ma potrzeby używania tych funkcji do dezynfekcji zwykłego tekstu.
Wolne radykalne

3
@ARUN, no. Standardową praktyką Drupala jest zawsze zapisywanie dokładnie tego, co użytkownik wpisuje w bazie danych i odkażanie tekstu przed renderowaniem.
Bezpłatne radykalne
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.