Użycie xss_clean nawet raz jest złe, o ile mi wiadomo. Ta procedura próbuje zdezynfekować dane przez usunięcie części lub wymianę części. Jest stratny i nie gwarantuje powrotu tej samej treści po uruchomieniu wiele razy. Trudno też przewidzieć i nie zawsze będzie działać właściwie. Biorąc pod uwagę ilość rzeczy, które robi, aby spróbować zdeitalizować ciąg, istnieje potężne uderzenie wydajności dla użycia tego na wejściu. Nawet najmniejsza część danych wejściowych, takich jak a = b, wywoła falę aktywności dla xss_clean.
Chciałbym powiedzieć, że nigdy nie należy używać xss_clean, ale realistycznie nie mogę tego powiedzieć. Ten system jest przeznaczony dla niedoświadczonych programistów, którzy nie wiedzą, jak bezpiecznie zarządzać treściami użytkowników. Jestem doświadczonym programistą, więc mogę powiedzieć, że żaden projekt nad którym pracuję nie powinien nigdy używać xss_clean. Faktem jest, że problemy związane z korupcją będą mniej problematyczne dla twórców niedoświadczonych z prostszym użyciem i ostatecznie zapewne sprawią, że ich kod będzie bezpieczniejszy, nawet jeśli powinni oni sami zabezpieczać swój kod, zamiast polegać na szybkich, brudnych i tanich hakach. Z drugiej strony, xss_clean nie gwarantuje pełnego bezpieczeństwa kodu i może ostatecznie pogorszyć sytuację, dając fałszywe poczucie bezpieczeństwa. Zaleca się, aby naprawdę się uczyć, aby upewnić się, że rozumiesz dokładnie wszystko, co robi twój kod, dzięki czemu możesz go naprawdę zabezpieczyć. xss_clean nie kompensuje błędów kodu, kompensuje błędy kodera.
Idealnie xss_clean chce być wykonane tylko na wyjściu (i chce zostać zastąpione przez htmlentities, itp.), Ale większość ludzi nie będzie się tym przejmować, ponieważ prostsze jest dla nich naruszenie czystości danych poprzez filtrowanie wszystkich danych wejściowych zamiast filtrowania (coś można wprowadzić raz, ale wyprowadzić dziesięć razy). Znowu niezdyscyplinowany programista nie może wstawić xss_clean dla jednego z tych dziesięciu przypadków wyjścia.
Realistycznie jednak, jedyną przyzwoitą metodą jest prawidłowe kodowanie wszystkiego w widoku w momencie, gdy ma być wyświetlane na stronie. Problem z kodowaniem wyprzedzającym polega na tym, że przechowujesz dane, które mogą być niepoprawnie zakodowane i możesz podwójnie kodować dane, jeśli są wprowadzane, a następnie wyprowadzać je do formularza, a następnie wprowadzać ponownie. Jeśli myślisz o czymś w rodzaju pola edycji, możesz mieć poważne problemy ze wzrostem ilości danych. Nie wszystkie urządzenia sanitarne usuwają zawartość. Na przykład, jeśli dodasz, to doda treść. Jeśli masz slash w swoich treściach za każdym razem, gdy uruchamiasz addslashes, dodaje się nowy slash powodujący jego wzrost. Chociaż istnieje duża szansa, że twoje dane zostaną osadzone w HTML-u, nie zawsze będziesz wiedzieć, gdzie ostatecznie znajdą się dane. Nagle pojawia się nowe wymaganie, które dotyczy poprzednich danych i to wszystko, jesteś wkręcony, ponieważ zastosowałeś i filtr stratny do danych przychodzących przed przechowywaniem. Strata, w tym przypadku, może oznaczać twoją pracę po uszkodzeniu wszystkich danych użytkownika w bazie danych. Twoje dane są zazwyczaj najcenniejsze dla aplikacji internetowej. Jest to duży problem z kodowaniem wyprzedzającym. Łatwiej jest pracować, jeśli zawsze wiesz, że twoje dane są czyste i mogą uciec przed nim w zależności od sytuacji, ale jeśli twoje dane mogą być w jakimkolwiek stanie, może to być bardzo problematyczne. Filtrowanie może również powodować sporadyczne logiczne przerwy. Ponieważ na przykład sanitacja może usunąć treść, można dopasować dwa łańcuchy, które nie pasują do siebie.
Wiele problemów z xss_clean na wejściu są takie same lub podobne do tych, dla magic_quotes: http://en.wikipedia.org/wiki/Magic_quotes
Podsumowanie: Nie powinno się używać, ale zamiast blokować złe dane na wejściu użytkownika i uciec odpowiednio na wyjściu. Jeśli chcesz odseparować dane użytkownika, powinno to nastąpić w kliencie (przeglądarce, formularzu sprawdzania poprawności), aby użytkownik mógł go zobaczyć. Nigdy nie powinieneś mieć niewidzialnej zmiany danych. Jeśli musisz uruchomić xss_clean. Powinieneś uruchomić go tylko raz, na wyjściu.Jeśli zamierzasz użyć go do sprawdzania poprawności danych wejściowych, to $ posortowane_danie! == xss_clean ($ posted_data), a następnie odrzuć.
xss_clean robi _nie_ globalnie konwertuje '<' and '>'. Został zaprojektowany do [zezwalania na "bezpieczne" tagi HTML] (https://github.com/EllisLab/CodeIgniter/issues/470#issuecomment-2156667) – sourcejedi