Ben sayfamda bu kod var:
header("Location: $page");
$ Sayfa GET değişkeni olarak komut geçirilir, herhangi bir güvenlik gerekiyor? (Eğer öyleyse ne)
Ben (tıpkı addslashes kullanmak için gidiyordu) ama bu URL'sini olacak şeyler ...
I Ben onları kesinlikle büyük bir güvenlik kusur bir bağlantıyı, (tıklayın alırsanız your kullanıcıların her yerde I gibi www.yoursite üzerinde giriş yapınız ileri olabilir. com? page = badsite.com). Bu kullanıcının kimlik bilgilerini yakalar dışında Şimdi, badsite.com tam olarak sitesi gibi görünen bir senaryo düşünüyorum.
Eğer kodu bir $urls
dizi tanımlama ve örneğin o diziye bir girdi, yalnızca endeksi geçen daha iyi konum:
$urls = array(
'pageName1' => '/link/to/page/number/1',
'pageNumber2' => '/link/to/page/number/2',
'fancyPageName3' => '/link/to/page/number/3',
);
# Now your URL can look like this:
# www.yoursite.com?page=pageName1
Bu kitap bir code injection vulnerability olduğunu. Kullanıcı istediği herhangi bir değer girebilirsiniz ve komut herhangi bir şikayet olmaksızın itaat edecektir.
Ama en önemli kurallarından biri - bile değil the en önemli kural ise - olduğunu:
Never trust the user data!
Yani geçti ne değer kontrol ve doğrulamak gerekir. Bir header injection vulnerability was fixed with PHP 4.4.2 and 5.1.2 respectivly, hala herhangi bir geçerli URI ve bunun yönlendiriliyorsunuz olacaktır çağıran kullanıcı girebilirsiniz olsa. ?page=%68%74%74%70%3a%2f%2f%65%76%69%6c%2e%65%78%61%6d%70%6c%65%2e%63%6f%6d%2f
?page=http://evil.example.com/ code> için kodlanmış URL ne bile böyle şifreli gibi.
Evet, biliyorsun. Sen ya da ben hemen o kod biraz yararlanmak için bir yol düşünemiyorum daha zeki kişi anlamına gelmez çünkü yapamam. Ne yapmak istediğiniz yönlendirme erişilebilir gördükleri bir sayfaya gidiyor emin olun. Hatta bu basit doğrulama işe yarayabilir:
$safe_pages = array('index.php', 'login.php', 'signup.php');
if (in_array($page, $safe_pages)) {
header("Location: $page");
}
else {
echo 'That page is not accessible.';
}