Şu bir güvenlik riski mevcut bildirimde içerir?
include "pages/".$_GET["page"].".php";
If yes:
- why?
- what would be a safer approach?
Evet. Yeni başlayanlar için, doğrulama çeşit olmadan doğrudan GET değişkenleri kullanarak, ever. Asla
Buna ek olarak, bir yolun keyfi şartname dahil izin vermemelidir.
Kesinlikle çok dinamik-lik ya da bunun yerine 'şeyler sevk belirteçleri geçmesi gerektiğini gerektiriyorsa Bunun yerine, doğrudan belirli bir içinde yollara içerir kısıtlamak (ve belirtilen yolda o dizindeki bir dosyaya başvurduğu kontrol) etmelidir ya d içerir (ve daha sonra verilen bir belirteç ifade eder dosyasına ne olduğunu görmek için bir ilişkisel diziye bir arama gibi bir şey yapmak) istiyorum.
İkinci bir örnek, bu gibi bir şey olacaktır:
$allowed_pages = array(
"page1" => "pages/page1.php",
"page2" => "pages/page2.php",
"foobar" => "pages/page7.php",
"stuff" => "pages/blarg.php"
);
$page = $_GET['page'];
if(array_key_exists($allowed_pages, $page)) {
include($allowed_pages[$page]);
}
(Bu durumda, sadece belirtilen anahtarlar dahil edilebilir ne doğrulama ve kısıtlama hem de eylemlerine izin gerçeği.)
Örnekte ../../settings.php
başka bir şey - in $_GET["page"]
sen dışında yok bir yol olabilir, çünkü risktir.
Bu gibi yapılmalıdır:
$allowedPages = array('news', 'contact', ...);
if ( in_array($_GET["page"], $allowedPages) ) {
include "pages/".$_GET["page"].".php";
} else {
throw new Exception('Page is not valid !');
}
İyi bir şey de dosya olup olmadığını kontrol etmektir.
.. "sayfaları /" $ _GET ["sayfa"] ". php" içerir;
Eğer bir önek kodlanmış ettik gerçeği gibi saldırıları engeller:
? Page = http% 3A% 2F% 2Fwww.blackhat.com% 2Fbad.code% 3F
Ama $ _GET ['sayfa'] içerebilir, çünkü '..' sonra birisi any sistem bir php uzantılı dosya eklenmesini zorlayabilir. Bu bir güvenlik uzlaşmayla sonuçlanması asla emin misiniz?
Başkaları tarafından önerilen gibi bir beyaz kullanarak çok daha güvenli ve aynı zamanda uzaktan dahil güvenlik açıklarını önlemek için yolu öneki için gereksinimini ortadan kaldırır.
C.