[PHP] Blokada wybranych znaków w formularzach


(Jontrix) #1

Witam!

Otóż mam taki skrypt:

<?php

$www = trim($_POST['www']);

$opis = trim($_POST['opis']);

$ip=$_SERVER['REMOTE_ADDR'];

if(empty($www) and empty($opis)) {

echo " 
 •   

";

}

else {

// dane z formularza

$dane = $www."`".$opis."`".$ip."\n";

// przypisanie nazwy pliku

$file = "folder/plik.txt";

// uchwyt pliku, otwarcie do odczytu i dopisania 

$fw=fopen("$file", "wb"); 

// ustawienie kursora na początku pliku 

rewind($fw);

// blokada pliku do zapisu

flock($fw, 2);

// zapisanie danych do pliku

fwrite($fw, $dane);

// odblokowanie pliku

flock($fw, 3);

// zamknięcie pliku

fclose($fw);

// potwierdzenie wygryzienia

echo "Wysłano!
";

}

?>[/code]

Jak widać, umożliwia on wysłanie formularza z polami "strona www" oraz "opis". Pole opis pozwala niestety na używanie znaków < oraz >, co oczywiście otwiera furtkę do wstawiania kodu i co za tym idzie - rozpieprzenia strony.

Chciałbym więc zedytować ten skrypt tak, aby uniemożliwił albo wpisanie albo wysłanie wspomnianych znaków. Może zwracać informację o użyciu niedozwolonych znaków, ale nie koniecznie. Ważne, aby uniemożliwił wprowadzanie kodu.

Napisałem na tym forum, bo podczas szukania rozwiązania dla mojego problemu natknąłem się na wątek:

blokada-wybranych-znakow-formularzach-php-t468370.html

Niestety moja znajomość PHP jest tak niewielka, że nie umiałem wprowadzić nic, co tam znalazłem. Muszę więc zwrócić się z prośbą, by ktoś zedytował i napisał w tym wątku gotowy kod. Wydaje mi się, że dla osoby znającej PHP nawet w stopniu średnio-zaawansowanym nie będzie to problemem.

Nie ukrywam, że jest to dość pilne. Proszę więc o pomoc z napisaniem tego i ewentualne porady.

Z góry dziękuję i pozdrawiam!


(Jefus) #2

Zapoznaj się z wyrażeniami regularnymi.

Podam Ci prosty przykład

$tekst = 'To jest jakiś tekst 123'; // zmienna zawierająca zarówno litery jak i liczby

$wzor = '/^[a-zA-Z]/'; // wzór zawierający informację o zakresie dopuszczalnych znaków. W tym wypadku wszystkie małe litery od "a" do "z" oraz wszystkie duże litery od "A" do "Z"


if(preg_match($wzor, $tekst))

{

// instrukcje, gdy zmienna $tekst mieści się w ramach wprowadzonego wzoru czyli zawiera tylko małe i duże litery z zakresu A-Z

}

else

{

// instrukcje gdy zmienna $tekst nie mieści się w ww. wzorze np. jak w tym wypadku zawiera także cyfry.

}

Polecam : http://blog.piotrnalepa.pl/2009/09/28/p ... przyklady/

Na blogu tego pana jest elegancko opracowane to zagadnienie

http://www.php.net/manual/pl/function.preg-match.php

W manualu zawsze znajdzie się coś ciekawego :slight_smile:

p.s Jeżeli machnąłem się nieznacznie w powyższym przykładzie to przepraszam, jestem po nocce i jeszcze nie piłem kawy :oops:


(Copycona) #3

Oj tylko trochę :slight_smile:

noi jeszcze spacje.

oj nie. Ten wzór oznacza "tekst zaczyna się od litery z zakresu a-z, lub jego większego odpowiednika".

Rozwiązania:

  1. [*:gyj7hppc]funkcja
    htmlspecialchars()

(Jefus) #4

o przepraszam ;(

trochę snu i teraz widzę swoje błędy :slight_smile:


(Jontrix) #5

No dobrze, dziękuję Wam za wskazówki, tylko problem w tym, że nawet jeśli dostał bym gotowy fragment kodu blokujący te znaki, to nie wiedział bym jak go dopisać do skryptu z pierwszego postu :oops:

To nie HTML, ani Javascript, że mogę sobie wszystko dopisywać gdziekolwiek, byle było w odpowiedniej sekcji: HEAD albo BODY.

Jeśli więc prośba o gotowiec nie łamie regulaminu, to prosił bym o wzbogacenie skryptu, który wysłałem o blokowanie znaków specjalnych i podanie mi go.

W ostateczności mogę (już sam) wyrzucić pole "opis" ze skryptu albo zmienić jego długość do kilku-kilkunastu znaków, jednak wolał bym zostawić go tak, jak jest i zablokować wspomniane znaki.

Ponawiam moją prośbę o pomoc,

Pozdrawiam