Kode di atas memastikan file cache disimpan di direktori yang aman dan valid, baik di lokasi yang diberikan pengguna (kalau valid) atau di direktori default.
Namun proses pengecekannya masih luput dari pengecekan berlapis yang memastikan sekali lagi direktori benar-benar sesuai dan aman dari eksploitasi.
Patch (perbaikan) menggunakan fungsi PHP realpath()
Megutip dari PHP Manual: realpath() expands all symbolic links and resolves references to /./, /../ and extra / characters in the input path and returns the canonicalized absolute pathname.
Implementasi:
Jika pengecekan realpath()
tidak ada, server bisa saja menggunakan path yang terlihat aman, padahal sebenarnya mengarah ke lokasi yang berbahaya. Misalnya, seorang hacker bisa mengirimkan path dengan ../../
(yang artinya “naik satu direktori”), yang memungkinkan mereka keluar dari folder yang seharusnya dan mengakses file sensitif di server.
Tanpa realpath()
, server tidak bisa mengenali risiko ini dan bisa saja menyimpan file di tempat yang salah atau mengekspos informasi pribadi.
Catatan dari developer di commit terkait:
Check $cache_path more carefully to make sure it’s real. dirname() returns ‘.’ if the string does not contain ‘/’ so we need to check for that, as well as checking for false.
P.S.:
Snippet di atas didapat dari riset software plugin WordPress: WP Super Cache