PHP htmlspecialchars: bezpieczeństwo sktyptów PHP

Coś jest niejasne? Wejdź na Forum PHP i uzyskaj pomoc

PHP htmlspecialchars – piszemy bezpieczny kod

Zanim przejdziemy do podsumowania rozdziału szóstego, chciałbym poruszyć pewną ważną kwestię, związaną z bezpieczeństwem. Pokażę Wam, w jaki sposób utrudnić złośliwym użytkownikom ingerowanie w Wasz kod. W podsumowaniu chciałbym napisać cały system logowania, który nie może obejść się bez filtrowania zagrożeń. Jeżeli prowadzimy pomniejsze forum czy niewielką stronkę, to taki dowcip zniweczy jedynie naszą ciężką pracę. W przypadku jednak, gdy posiadamy dużą bazę klientów, przechowujemy ich dane personalne, kontaktowe itp., skutki włamania mogą okazać się tragiczne.

Zasada ograniczonego zaufania

Powinna nam ona przyświecać podczas konstruowania każdego serwisu internetowego. Polega ona na tym, że użytkownikowi nie można ufać (czyt. „ma złe intencje”). Przejawia się ona np. tym, że liczba pól formularza powinna być ograniczona do mininum, by zmniejszyć liczbę potencjalnych luk w bezpieczeństwie.

Filtrowanie niebezpiecznych znaków

Język PHP posiada wbudowane funkcje, mogące odfiltrować potencjalne niebezpieczeństwo. Jedną z nich, bardzo często przeze mnie stosowaną, jesthtmlspecialchars($string). Funkcja ta jest bardzo podobna dostrip_tags($string). Poniżej przedstawię ich zastosowania:

<?php

// Tekst zawierający potencjalne niebezpieczeństwo
$string = '<a href="adres">Niebiezpieczny link</a> 
           do <b>strony konkurencji</b>.';
		   
// HTMLSPECIALCHARS
$string_h = htmlspecialchars($string);

// STRIP_TAGS
$string_t = strip_tags($string);

echo $string_h.'<br/>'.$string_t;

// wyświetli:
// <a href="adres">Niebiezpieczny link</a> 
//         do <b>strony konkurencji</b>.
// Niebiezpieczny link do strony konkurencji.
		 
?>

Zasada działania

Oba skrypty przeszukują ciąg znaków, podany jako argument, w celu znalezienia znaczników HTML i PHP. HTMLSPECIALCHARS zamienia znaki specialne (<,>,’,”,&) na ich „bezpieczne odpowiedniki”. Dzięki temu, wyświetlają nieaktywny kod html w surowej postaci. Więcej szczegółów na stronie PHP.net,tutaj. STRIP_TAGS natomiast usuwa napotkane znaczniki, pozostawiając suchy tekst, nieobstawiony html-em. Po szczegóły odsyłam na PHP.net.

Jeżeli chcesz poczytać więcej o bezpieczeństwie stron www, zapraszam do zapoznania się z artykułem: Bezpieczeństwo stron www. Dowiesz się tam co jeszcze możesz zrobić, by Twoja strona była bezpieczna.

To tyle, jeśli chodzi o zabezpieczenia. W podsumowaniu zobaczysz, kiedy i gdzie należy ich użyć. Zapraszam!

Spis lekcji w rozdziale szóstym

Poprzednia lekcja: Wysyłanie obrazka na serwer Następna lekcja: Tworzenie pliku graficznego