Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [JavaScript][PHP]Filtrowanie pobrnych danych htmlspecialchars()
q3d
post 6.03.2019, 11:42:44
Post #1





Grupa: Zarejestrowani
Postów: 98
Pomógł: 7
Dołączył: 10.01.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
viking
post 6.03.2019, 11:58:21
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


Poczytaj sobie https://docs.zendframework.com/zend-escaper...tml-attributes/


--------------------
Go to the top of the page
+Quote Post
q3d
post 6.03.2019, 13:05:55
Post #3





Grupa: Zarejestrowani
Postów: 98
Pomógł: 7
Dołączył: 10.01.2006

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
nospor
post 6.03.2019, 13:12:31
Post #4





Grupa: Moderatorzy
Postów: 36 440
Pomógł: 6290
Dołączył: 27.12.2004




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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
viking
post 6.03.2019, 13:26:29
Post #5





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
q3d
post 6.03.2019, 14:29:30
Post #6





Grupa: Zarejestrowani
Postów: 98
Pomógł: 7
Dołączył: 10.01.2006

Ostrzeżenie: (0%)
-----


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']?
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 06:37