Luka XSS w skryptach Apache PHP
Mam dwa serwery CentOS8 z Apache z MOD_PHP. Odkryliśmy, że dodanie ukośnika na końcu adresu URL zmienia podstawowy-uri w skryptach, tworząc lukę w zabezpieczeniach XSS.
Na przykładhttp://myserver.com/Login.php/ lub http://myserver.com/Login.php/extra_stuff/powoduje, że podstawowy-uri dla linków względnych i obrazów jest niepoprawny. Jeśli extra_stuff zawiera javascript, możesz potencjalnie zmienić zawartość strony.
Jak powstrzymać Apache przed traktowaniem skryptów PHP jak katalogu, jeśli mają one końcowy ukośnik i zwracają 404? Wolałbym nie musieć edytować każdej strony, aby dodać tag.
Co mnie wprawia w zakłopotanie, to dlaczego poniższa konfiguracja Apache dopasowuje skrypt PHP z końcowym ukośnikiem i dodatkowymi znakami, gdy tak naprawdę nie istnieje, i wysyła go do programu obsługi.
FilesMatch \.(php|phar)$>
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
Odpowiedzi
Jak wyjaśnia @CBroe w komentarzu :
Nie widzę jednak, jak mogłoby to stworzyć jakąkolwiek lukę w zabezpieczeniach, chyba że aktywnie wyprowadzisz gdzieś ścieżkę adresu URL żądania. Tylko dlatego, że adres URL jest
http://myserver.com/Login.php/extra_stuff/
i domyślnie jest to podstawowy adres URL, względem którego zostaną rozwiązane wszystkie względne adresy URL, nie oznacza to, że jakikolwiek kod JavaScript w tym miejscu zostałby wykonany. Kiedy wstawiasz adres URL do dokumentu bez żadnego traktowania i rozważania, może to być oczywiście problem z XSS.
AcceptPathInfo wyjaśnia zachowanie. Kod dostawców rzeczywiście miał wiele nieanityzowanych zastosowań $ _Server ["PHP_SELF"], które poprawiłem.