Biała i czarna lista - klasyka
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: bezpieczeństwo, www |
