Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przyjmowanie danych od użytkownika w 2024 roku
Rotmistrz
post
Post #1





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 20.04.2022

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


Czołem!
Jaki jest Waszym zdaniem najlepszy sposób na przyjmowanie i przygotowywanie danych otrzymanych od użytkownika, np. przez formularz? Trochę szperałem w sieci, ale zawsze konkretna odpowiedź od konkretnych osób i dyskusja wokół tego jest dla mnie najbardziej wiarygodnym i aktualnym źródłem wiedzy.
1. W ostatnim czasie popularne stały się tzw. sanityzery (oczyszczacze? (IMG:style_emoticons/default/wink.gif) ), np. HTMLSanitizer, który jest pakietem Symfony od wersji 6 (chociaż działa też chyba samodzielnie), opracowany na podstawie dokumentu HTML Sanitizer W3C Standard Proposal.. Polega to na tym, że tylko niektóre tagi HTML uznane domyślnie za bezpieczne (np. <b>, <i> itp.), lub bezpośrednio zdefiniowane w konfiguracji, są przepuszczane łącznie z ich zawartością, natomiast te uznane za potencjalnie niebezpieczne całkowicie wylatują z przetwarzanej treści lub ewentualnie jest pozostawiana ich treść (w przypadku ich blokowania. Z jednej strony wydaje się, że jest to bardzo dobre rozwiązanie, bo po (1) zdajemy się na wiedzę i doświadczenie twórców takiej klasy sanityzującej, a po (2) niektóre tagi są puszczane, co jest korzystne, jeśli pozwalamy na proste manewrowanie tekstem (chociaż można do tego użyć jakiegoś innego kodu, np, markdown, zamiast bezpośrednio HTML). Z drugiej strony możemy stracić jakąś treść, która była zawarta między potencjalnie niebezpiecznymi tagami, ale w sumie jak ktos użył podejrzanych tagów, to chyba nie ma powodu brać takich danych jako wartych uwagi z punktu widzenia biznesowego (IMG:style_emoticons/default/wink.gif) . Czy w takim razie może macie jakąś "swoją ulubioną" konfigurację takiego oczyszczacza? Może jakieś połączenie pomiędzy allowSafeElements() i dodaniem do tego zestawu niektórych blokowanych elementów, żeby usunąc nadmiarowe zbędne tagi?
2. Stary, dobry (?) htmlspecialchars() i/lub w połączeniu ze strip_tags() - czy aby na pewno bezpieczne przeciwko próbom XSS? Wydaje się, że chyba tak, ale chętnie poznam Waszą wiedze w tym temacie. Wadą jest to, że wszystkie znaki potencjalnie specjalne, np. cudzysłowy, są zamieniane na encje HTML, co w przypadku połączenia z dodatkowym escapowaniem przez system szablonów wygląda potem średnio, bo staje się to faktycznie encjami, a nie znakami, jakie reprezentują. Ponadto w przypadku chęci zachowania niektórych tagów jest to problem, bo trzeba je potem odkodowywać itp., ale wtedy odkodujemy też te potencjalnie niebezpieczne, więc lipa. Zaletą jest z kolei to, że nie utracimy treści, którą ktoś chciał nam przekazać, ale zaplątała się w tagi HTML, które przez Sanitizera mogłyby być uznane za niebezpieczne.
3. Niektórzy twierdzą, że bez sensu jest w ogóle procesować i modyfikować treści od użytkownika, bo należy skupić się, aby odpowiednio je przeprocesować wtedy, gdy ich używamy, czyli np. escapować z użyciem mechanizmów, jakie mają systemy szablonów (np, Twig) lub parsować do JSONa, kiedy potrzebujemy JSON i wtedy funkcja przygotowująca JSON też odpowiednio przetworzy znaki specjalne i tak dalej, czyli generalnie w momencie użycie dopiero martwimy się, czy ktoś nie próbował przesłać złośliwego kodu. Niby nie trzeba nic robić na wejściu, ale z kolei trzeba uważać przy wyświetlaniu czy przesyłaniu takiej treści.

A zatem jak najlepiej radzić sobie z odpowiednim przetwarzaniem treści nadesłanej przez użytkownika? Może są jeszcze jakieś inne sposoby? Jak Wy przetwarzacie treści napływające od użytkowników?

Liczę na owocną dyskusję i/lub konkretne rozwiązania (IMG:style_emoticons/default/wink.gif) .
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Rotmistrz
post
Post #2





Grupa: Zarejestrowani
Postów: 5
Pomógł: 0
Dołączył: 20.04.2022

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


No więc właśnie do tego zmierzałem, bo jakoś chyba tak w pełni to nie wybrzmiało. Czyli rozumiem, że można podsumować tę dyskusję i wymianę doświadczeń następująco:
1. Escapujemy w szablonie, więc nie trzeba ani oczyszczacza, ani htmlspecialchars(), ewentualnie możemy użyć oczyszczacza i część znaków ręcznie przywrócić po procesie oczyszczenia (np. +) lub strip_tags(), żeby wywalić szpecące tagi, które i tak zostaną wyescapowane.
2. Pozwalamy częściowo na HTML, więc używamy oczyszczacza i w danym miejscu nie escapujemy tych danych.
3. Szablon nie escapuje, ale nie chcemy żadnego HTMLa, więc używamy htmlspecialchars() i oczyszczacz też nie zaszkodzi.
4. Szablon nie escapuje, a HTML jest częściowo dozwolony, więc używamy oczyszczacza.

Przepraszam, jeśli męczę bułę za bardzo, ale ostatnio sporo nad tym myślałem i chciałem rozwiać wątpliwości w szerszym gronie.

Pozdrowienia
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 29.12.2025 - 21:54