Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Przyjmowanie danych od użytkownika w 2024 roku
Rotmistrz
post 25.02.2024, 14:42:38
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? 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 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 wink.gif.
Go to the top of the page
+Quote Post

Posty w temacie


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: 10.05.2024 - 02:58