File_exists güvenliğini içermelidir

3 Cevap php
/* define page path */
define("PAGE_DIR", "pages/");

if (file_exists(PAGE_DIR."$_GET[page].php")) include(PAGE_DIR."$_GET[page].php");

Bu ne kadar güvenli? Sayfa sayfalar olarak adlandırılan bir klasörde ise örneğin başka bir web sunucusu üzerinde bir sayfa dahil olabilir?

Teşekkürler

3 Cevap

Bu Tüm güvenli değil - $_GET[page] varsa ne olur düşünün ../../../somewhere/else/

Sen açıkça izin sayfaların bir listesi olmalıdır.

Düzenleme: Ben farklı bir sunucudan bir dosya içerebilir sanmıyorum, ama yine de yapıyor olması iyi bir şey değil.

Bu, bir komuta doğrudan dahil gibi özellikle bir şey () sağlıksız kullanıcı girişi geçmek için iyi bir uygulama asla. Mutlaka altında yatan webserver / OS Bunlardan herhangi biri, kötü niyetle veya başka kullanılan, onlar zannediyorsunuz değil kullanıcı görme şey neden olabilir, örneğin, vb göreli yolları, genişletilmiş karakterleri işlemek için nasıl gidiyor bilmiyorum bkz.

Bir olası istismar: Kullanıcı sunucu üzerinde bilinen bir yerde kötü niyetli bir komut dosyası göreli yolu geçer. http://webserver/yourscript.php?page=%2e%2e%2f%2e%2e%2f%2e%2e%2fhome/bad_user/evil_script

içerme fonksiyonu / sayfaları çevirmek olabilir.. /.. /.. / home / bad_user / evil_script.php, mutlulukla, bazen içerecektir. Yani görev web sayfası çok iyi o kötü şeyler her türlü yapmak için kullanabilirsiniz, hangi bad_user en php komut dosyası yürütebilir.

En azından yeni bir değişken ve addslashes () için $ _GET ['path'] atamanız gerekir.

Önce verileri sterilize / doğrulama için $ _GET veya $ _POST ile anything tehlikelidir. Tüm kullanıcıların seni almak için dışarı ve Kullanmadan önce verileri dezenfekte varsayalım.