Biała i czarna lista - klasyka

21 maj 2008, autorstwa: kozik

Polecam do przejrzenia ostatnią lukę w MyBB, a właściwie łatę, czyli wersję 1.2.13. Klasyczna nieefektywna czarna lista.

Chodzi o plik inc/class_language.php i kod:

$language = str_replace(array("/", "\\", ".."), '', trim($language));

czyli wypisanie niechcianych znaków i ich skasowanie z nazwy języka. Wszystkie poradniki dotyczące poprawnego, bezpiecznego kodowania mówią jasno - nie używać “czarnych list” (no chyba, że innej drogi nie ma). Używać “białej listy”, czyli wypisania tylko tych znaków/przypadków, które chcemy. Dlaczego? Bo czarna lista nie zabezpieczy przed wszystkimi niechcianymi przypadkami, ale jedynie przed znanymi niechcianymi przypadkami. Różnica znacząca…

Najgorsze (lub najlepsze… zależy od punktu widzenia), że w kodzie się pałęta trochę takich czarnych list. Polecam wykonanie komend:

fgrep -r 'str_replace(' /path/to/mybb_source_code/ | grep '\\\\'
fgrep -r 'str_replace(array' /path/to/mybb_source_code/
fgrep -r 'str_replace(' /path/to/mybb_source_code/ | grep '"\."'

A to tylko podmiana znaków związanych ze ścieżkami przez str_replace(). Warto by zbadać znaki specjalne dla HTML i SQL, a także funkcje [ep]reg_replace() i mb_ereg_replace().

Wysłano w Blog - Web | Tags: , |

Adres dla trackback. RSS dla komentarzy w tym wpisie.
Dodaj komentarz




Uwaga: Włączona jest moderacja komentarzy, więc nowy komentarz nie ukaże się bezpośrednio po jego wysłaniu.

Uwaga: Działa filtr antyspamowy. Jeśli umieścisz w komentarzu odnośniki, to może on zostać błędnie zakwalifikowany jako spam.