Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][PHP]Filtrowanie pobrnych danych htmlspecialchars()
Forum PHP.pl > Forum > Przedszkole
q3d
Pobieram z bazy dane. Część z nich to np. wartości atrybutów HTML. Czy one również mają być filtrowane htmlspecialchars();?

  1. <p class="'.htmlspecialchars($config['class']).'">'.htmlspecialchars($content).'</p>


Gdy próbowałem:

  1. $config['class'] = '<script>alert()</script>';
  2.  
  3. <p class="'.$config['class'].'">...</p>


to skrypt JS się nie wykonuje.
viking
Poczytaj sobie https://docs.zendframework.com/zend-escaper...tml-attributes/
q3d
Czy dobrze rozumiem?

Jeżeli mam pewność, że dane znajdą się wewnątrz podwójnego cudzysłowu: class="'.$class.'" to mogę używać escapeHtml() z tej klasy. Natomiast jeżeli nie mam takiej pewności powinienem używać: escapeHtmlAttr()?

Natomiast filtrować wyprowadzana dane należy zawsze niezależnie od tego czy wartość atrybutu jest w podwójnym, pojedynczym czy bez cudzysłowu?
nospor
WYbacz, ze troche nie na temat moze, ale jak widze, ze wklase probujesz wlozyc taki tekst:
"<script>alert()</script>"
To odnosze nieodparte wrazenie ze cos tu jest nie halo i zamiast martwic sie o escapowanie to moze lepiej poprawic to i owo w samej strukturze aplikacji?
viking
escapeHtmlAttr zawiera ściślejsze reguły usuwania znaków i dotyczy atrybutów. Nie bardzo rozumiem jak do takiego wniosku doszedłeś. Nazwy metod jasno mówią gdzie je należy wykorzystywać. Oczywiście to tylko przykład, możesz swoje rozwiązanie zaimplementować, ale dobrze wyjaśnia gdzie leży problem. Dla atrybutów w cudzysłowach powinno być
  1. htmlspecialchars($url, ENT_QUOTES | ENT_SUBSTITUTE, 'utf-8')
Wszystko co pochodzi od użytkownika ma być bezwzględnie filtrowane i weryfikowane.
q3d
Cytat(nospor @ 6.03.2019, 13:12:31 ) *
WYbacz, ze troche nie na temat moze, ale jak widze, ze wklase probujesz wlozyc taki tekst:
"<script>alert()</script>"
To odnosze nieodparte wrazenie ze cos tu jest nie halo i zamiast martwic sie o escapowanie to moze lepiej poprawic to i owo w samej strukturze aplikacji?


To chyba nieporozumienie. Ja nie chcę w atrybut HTML class (czy jakikolwiek inny) wsadzić kodu JS tylko się zastanawiałem jaki byłby efekt takiego wsadzenie biorąc pod uwagę, że wartość tam wsadzana pochodzi z zewnętrznego źródła (np. z bazy danych). Chyba, że ja czegoś nie rozumiem.

Czy:
Wszystko co pochodzi od użytkownika === Wszystko co pochodzi z zewnętrznego źródła
?

Pobieram z "własnej" bazy danych konfigurację np.:

  1. $config['iloscElementow'] = $db->('config');


to przed użyciem mam filtrować i weryfikować np.:

  1. $iloscElementow = (int) $config['iloscElementow'];


i dopiero korzystać z $iloscElementów, a nie z $config['iloscElementow']?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.