Preg_match ile kullanıcı girilen göreli URL Eşleştirme

1 Cevap

I requires bir PHP komut dosyası içine dosya eklemek için kullanıcı girişi kullanarak bir proje var. Kullanıcı girişi herhangi bir göreli URL olabilir (EX :/ folder1/folder2/file.jpg, / folder1/folder2 /)

Aşağıdaki giriş aklı başında olup olmadığını kontrol etmek için bir hamlede sıradanifade olacaktır:

if(preg_match('/^(\/[-_a-zA-Z0-9]+)+\/?$/D', $_GET['loc']))
{
   //Location is good!
}

Açıkçası herhangi bir yerel dosya dahil saldırıları önlemek isteyen im. Bunun yerine yukarıdaki gibi dosyanın dahil beyaz liste önerilerini almak önce, ben, dosyaları çok switch deyimi veya if / else alışkanlık iş 1000'ler var.

1 Cevap

Ben tüm izin verilen dosyaların bir beyaz liste oluşturmak ve sadece o ile eşleşen dosyaları izin istiyorum. Bu nedense pratik değilse, o zaman ben isteksizce regex çeşit girişimi istiyorum (Ama yol ayırıcılar platforma bağlı olarak fark vardır, bu yüzden iyi şanslar). Php yönergesi open_basedir'dan ile bu şeyi kilitlemek için emin olun. Bu, en azından bir şey olur durumda hasarı en aza indirecektir.