Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyłapywanie przekleństw w formularzach
Forum PHP.pl > Forum > Przedszkole
Szunaj85
Mam skrypt w którym w tablicy trzymam zbiór przekleństw i brzydkich słów. Za pomocą pętli i if-ów sprawdzam czy w formularzu nie znajdują się jakieś słowa z tablicy. Skrypt działa dobrze jednak łatwo go ominąć.
Przykładowo moje brzydkie słowo to: "przykład".
W takiej postaci skrypt zadziała, jednak jak dam "p_r_z_y_k_ł_a_d", "p*r*z*y*k*ł*a*d", "p-r-z-y-k-ł-a-d"
lub choćby "p_rzykład", p*rzykład, p-rzykład już nie. Jak przed czymś takim się uchronić.
Możliwe, że trzeba wykorzystać wyrażenia regularne, ale nie wiem jak je napisać. sadsmiley02.gif
Nie chodzi tu o to żeby skrypt wszystko i wszystkich blokował tak jak jest z niektórymi cenzorami, jednak chciałbym żeby był bardziej rozbudowany.
Tu podałem przykład ominięcia skryptu, który mi jest znany jeśli ktoś zna inne sposoby proszę o ich pokazanie i o rozwiązania. biggrin.gif
zend
str_replace i zamieniasz wszystkie "dziwne" znaczki na "nic" i dopiero wtedy sprawdzasz
kartin
Nie ma na 100% skutecznego sposobu, no chyba, że będziesz moderował posty.

Zawsze można pomieszać przkyład znaki , wpisać z błędem, literówką itp. np. przyklad można też zastąpić kilka znaków przy..ad a i tak każdy będzie wiedział o co chodzi.

Co nie wymyślisz to zawsze znajdzie się obejście aaevil.gif
lobopol
No niestety 100% filtra nie zrobisz, ba jak ktoś będzie chciał to ominie każdy (np. zmieniając kodowanie znaków czy zamiast przekleństwo napisze PRZE KLEŃSTW0 czy jeszcze inną metodę), jeżeli zrobisz zbyt mocne filtrowanie to też zaczną pojawiać się kwiatki, np. jeżeli zamienisz wszystkie dziwne znaki na nic z pominięciem spacji to wy raz dalej przejdzie, ale jeżeli uwzględnisz spację przy usuwaniu znaków to będziesz cenzurował środki wyrazów np. porachuje zostanie częściowo ocenzurowane. Cenzura takich wyrazów przez automat jest bardzo ciężka, a wręcz niemożliwa.
konole
Wpisuj różne kombinacje, odmiany, kawałki, np. kurw, urwa. itd. No niestety, głupoty człowieka nie pokonasz.
Szunaj85
zend Twoje rozwiązanie byłby całkiem całkiem gdyby nie fakt, że przekręt z przekleństwem może wyglądać choćby tak: "p-r-z-y-k-ł-a-d", "p.r.z.y.k.ł.a.d", p/r/z/y/k/ł/a/d", itp, a takich znaków jak myślnik, kropka, ukośnik, itp nie mogę usuwać.
Cytat
jeżeli zamienisz wszystkie dziwne znaki na nic z pominięciem spacji to wy raz dalej przejdzie, ale jeżeli uwzględnisz spację przy usuwaniu znaków to będziesz cenzurował środki wyrazów np. porachuje zostanie częściowo ocenzurowane.

konole Bazując na Twoim przykładzie "urwa" w przykładowym zdaniu "Urwałaś się z choinki". Dlatego ja jestem świadomy, że z takimi końcówkami trzeba uważać. lobopol dobrze mówi.
Cytat
No niestety 100% filtra nie zrobisz

Tak jak napisałem chciałbym żeby był bardziej rozbudowany, a nie 100% skuteczny.
W związku z tym jakiś konkretne propozycje?

Widzę, że temat ucichł. Wydaje mi się jednak, że warto go jeszcze podrążyć. sadsmiley02.gif
Może ktoś zna jeszcze jakieś inne rozwiązania. winksmiley.jpg
Hoku
na przekręt z .,/-+|_ polecam regex ;]
zrobić
$brudna= explode(" ", $string);
$czysta =preg_replace('/[^a-zA-Zńąćśźżó곣ӯŹĆĄŚĘŃ ]/', '',$string);
zostaje jedynie spacja i polskie znaki dziwnie to wygląda ale działa na polskie znaki nie miałem innego pomysłu...
a potem $tabliczka= explode(" ",$czysta);
sprawdzać w 1 pętli $tabliczka[$i] z bazą wulgarnych.
i tylko wtedy i wyłącznie wtedy gdy $czysta[$i] jest wulgarna podmienić w tablicy $brudna[ $i]="cenzura";
$j2=++$j;
i w nr. 2 pętli możesz $tabliczka[$j].$tabliczka[$j2] sprawdzać do bazy wulgarnych.
i tylko wtedy i wyłącznie wtedy gdy $tabliczka$j].$tabliczka[$j2] jest wulgarna podmienić w tablicy $brudna[$j]="cenzura" $brudna[$j2]="" ;

i w $brudna tablice łaczymy $wyniczek= implode(" ",$brudna);
i $wyniczek jest dobry.
raczej usunie jedynie wulgaryzmy bo raczej do głowy przychodzi mi tylko usunięcie zdania że "pierd Oli był naprawdę głośny".
ale już "Urwałaś się z choinki" nie naruszy smile.gif

jeśli ktoś zrobi k**wa to już musiałbyś albo cenzurować słowa zawierające *+ w sobie w całości lub sprawdzać podobieństwo innymi słowami. a to by raczej ostro muliło ...
Szunaj85
Hoku Wybacz, ale jakoś mało to dla mnie zrozumiałe. sadsmiley02.gif Mógłbyś to jaśniej opisać lub podać jakiś przykład?
I właśnie jak napisać skrypt, który by blokował takie brzydkie wyrazy jakie podałem wyżej w przykładach, np.
p-r-z-y-k-ł-a-d, (czyli mimo, że są jakieś znaki między literami) posiadając jedynie tablicę z normalnymi brzydkimi wyrazami?
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.