Wykryto działanie AdBlocka!

Prawdopodobnie masz właczonego Adblocka. Korzystanie z bloga jest całkowicie darmowe. Jeśli jednak chcesz docenić prace autora, wyłacz blokowanie reklam dla tej witryny, aby jeszcze bardziej zmotywowac autora do dalszej pracy oraz częstszej publikacji artykułów.

Dziękuje :)

Treść główna bloga

Artykuły

Sposoby implementacji funkcji zapezpieczających skrypty PHP


Sposoby implementacji zabepieczeńW tym wpisie zajmę się przedstawieniem w jaki sposób można zaimplementować funkcje zabezpieczające skrypty PHP. Nie przedstawię tu sposobów na zabezpieczenie skryptów, jednak jeśli jesteś zainteresowany zerknij tutaj: bezpieczeństwo stron internetowych. Poniżej przedstawię 4 sposoby implementacji zabezpieczeń, mn.i: za pomocą klas czy też za pomocą funkcji, dotyczące funkcji: htmlspecialchars, strip_tags oraz htmlentities.

Sposób pierwszy: funkcja bazowa

Kiedy używać? Ten sposób implementacji możemy z powodzeniem użyć, np. w prostym formularzu kontaktowym czy też w prostym skrypcie sprawdzającym aktualny pagerank strony www.

Zmienna $output zawiera wynik zależny od danej funkcji.

Sposób drugi: funkcja

Za pomocą stworzonej przez nas funkcji jest wygodniej używać tych funkcji typu htmlspecialchars czy też strip_tags, ponieważ jeżeli tworzymy większy skrypt łatwiej jest używać tego typu rozwiązań. To samo tyczy się klas.

Funkcja przyjmuje 3 argumenty:
$function – Rodzaj funkcji jaka ma zostać używa na danych
$data – dane przeznaczone do filtracji. Może to być zarówno tablica jak i zwykła zmienna.
$one = true – zmienna ustawiona domyślnie na true. Oznacza, że ma być przefiltrowana tylko jedna zmienna. Jeśli podamy false zostaną przefiltrowane wszystkie zmienne.
$params – zmienna jest tablicą. Parametr opcjonalny. Jeśli zostanie zdefiniowany, dodatkowe paramtery zostaną dodane do funkcji htmlspecialchars, strip_tags lub htmlentities.

Przykładowe zastosowanie:

Powyższy kod zastosuje funkcję strip_tags na elementach tablicy $array, trzeci argument oznaczony false oznacza, że w tablicy jest więcej niż jedna zmienna.

Sposób trzeci: klasa

Czym się różni klasa od funkcji?
Otóż funkcję stosuje się raczej do niewielkich projektów gdzie nie trzeba dzielić aplikacji na modułu, natomiast przy tworzeniu, np. nawet prostego CMS warto zastosować architekturę MVC, gdzie dobrym pomysłem jest umiejscowienie wszystkich klas, np. do filtrowania wyników, zarządzania plikami czy też sesją w jednym folderze. Aby użyć klasy wystarczy dodać jedynie przedrostek filter:: do nazwy metody.
Dodatkowym atutem klasy jest to, że wprowadzając inne metody filtrujące, np. za pomocą funkcji filter_var mamy wszystko w jednym miejscu, czyli w klasie. Natomiast jeśli chcielibyśmy zrobić podobnie za pomocą funkcji musielibyśmy definiować osobne funkcje w osobnych lub w jednym pliku, co wydaje mi się jest nieco kłopotliwe.

Na koniec kilka przykładów:
a) za pomocą funkcji:

  • array_map('htmlentities', $data, $params);
    problem w tym, że to nie zadziała (array_map pobiera nieskończoną ilość tablic, zatem $params jest traktowana jako kolejna tablica do przerobienia – dlatego to może działać, lub nie). poza tym – array_map AFAIR jest płaskie (dlatego lepiej korzystać z array_walk_recursive)
    cała funkcja filterData IMO jest przekombinowana, proponuję coś w deseń: http://wklej.org/id/1148254/
    Szkoda, że syntax anonimowych w PHP, w porównaniu choćby do JS, śmierdzi…