Kerentanan XSS pada skrip Apache PHP
Saya memiliki dua server CentOS8 yang menjalankan Apache dengan MOD_PHP. Kami telah menemukan bahwa menambahkan garis miring ke akhir url mengubah basis-uri dalam skrip yang membuat kerentanan XSS.
Sebagai contohhttp://myserver.com/Login.php/ atau http://myserver.com/Login.php/extra_stuff/menyebabkan basis-uri untuk tautan dan gambar relatif menjadi salah. Jika extra_stuff berisi javascript, Anda berpotensi mengubah konten pada halaman.
Bagaimana cara menghentikan Apache memperlakukan skrip PHP seperti direktori jika skrip tersebut memiliki garis miring dan mengembalikan 404? Saya lebih suka tidak perlu mengedit setiap halaman untuk menambahkan tag.
Yang membingungkan saya adalah mengapa konfigurasi Apache di bawah ini mencocokkan skrip PHP dengan garis miring dan karakter asing ketika tidak benar-benar ada, dan mengirimkannya ke penangan.
FilesMatch \.(php|phar)$>
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
Jawaban
Seperti yang dijelaskan @CBroe dalam komentar :
Saya tidak melihat bagaimana ini akan membuat kerentanan apa pun, kecuali Anda secara aktif menampilkan jalur URL permintaan di suatu tempat. Hanya karena URL-nya adalah
http://myserver.com/Login.php/extra_stuff/
dan secara implisit adalah URL dasar semua URL relatif akan diselesaikan, tidak berarti kode JavaScript di sana akan dieksekusi. Saat Anda memasukkan URL ke dalam dokumen tanpa perawatan dan pertimbangan apa pun, maka ini tentu saja bisa menjadi masalah XSS.
AcceptPathInfo menjelaskan perilakunya. Kode vendor memang memiliki banyak penggunaan $ _Server ["PHP_SELF"] yang tidak dibersihkan yang telah saya koreksi.