Dinamik Güvenlik Dahil

4 Cevap php

Güvenli bir dizide hepsini koymadan sayfaları eklemek için herhangi bir yolu var mı?

if (preg_match('/^[a-z0-9]+/', $_GET['page'])) {

$page = $_GET['page'].".php";
$tpl = $_GET['page'].".html";
if (file_exists($page)) include($page);
if (file_exists($tpl)) include($tpl);

}

Ben bu oldukça güvenli hale getirmek için ne eklemek gerekir?

Ben bütün sayfalarda dahil edilmelidir şeyler katmak zorunda sevmiyorum bacause ben bu şekilde yapıyorum. "> Başlık> içerik bulunmaktadır footer include"-yol. Ben istiyorum ne herhangi bir motor şablonu / çerçeveler kullanmayın.

Teşekkürler.

4 Cevap

Geçerli uygulamasında zayıflık olduğunu ...

  1. Düzenli ifade sadece dize başlangıcını test, yani "images/../../secret" geçecekti, ve
  2. daha fazla doğrulama olmadan, "index" da geçerli bir değer olacak ve bir yinelemeye neden olur.


Lütfen uygulama güvenli hale getirmek için, o kendi dizine dahil edilmesi amaçlanan her şeyi koymak için iyi bir uygulama var (örneğin "includes" ve "templates"). Buna dayanarak, sadece bu dizinin hiçbir çıkış yolu olduğundan emin olmak gerekir.

if (preg_match('/^[a-z0-9]+$/', $_GET['page'])) {
    $page = realpath('includes/'.$_GET['page'].'.php');
    $tpl = realpath('templates/'.$_GET['page'].'.html');
    if ($page && $tpl) {
        include $page;
        include $tpl;
    } else {
        // log error!
    }
} else {
    // log error!
}

Not: realpath dosya var ve false, aksi takdirde verilen göreli yolu mutlak yolunu döndürür. Bu yüzden file_exists gerekli değildir.

Eğer büyük olasılıkla iyi olmayan-db, çözüm olacak bir dizi mevcuttur sayfaların bir listesini saklamak isteyen değil söylediğinden rağmen.

$availFiles = array('index.php', 'forum.php');
if(in_array($_GET['page'].".php", $availFiles))
 {
   //Good
 }
else
 {
   //Not Good
 }

Kolayca DB sorguları ile veya bir dosya okuma, hatta bir dizinin içeriğini okuma ve mevcut istemediğiniz şeyleri filtreleyerek dynamicly dizi oluşturabilir.

Sen içerir kullanıcı sağlanan bilgileri kullanmak asla. Her zaman sizin için yapar isteği işleyicisi çeşit olmalıdır. Bir düzenli ifade şeyimi filtre olsa her şeyi filtre olmaz.

Eğer site hacklenmiş almak istemiyorsanız size kullanıcıların dahil atayarak uygulamanın akışını kontrol etmesine izin vermeyin.

Ben Unkwntech katılıyorum. Bu web sitenizin içine dosyaları dahil etmek için böyle bir güvensiz bir yoldur, ben PHP programcıları tümüyle ortadan isterdim. Hatta bu yüzden, mümkün olan tüm maçları bir dizi kesinlikle daha güvenlidir. Ancak, Bu MVC pattern daha iyi çalıştığını göreceksiniz ve daha güvenlidir. I code igniter indirmek ve bir öğretici ya da iki almak, sen istiyorsun kullanımı dinamik içerir aynı nedenle onu seveceksiniz istiyorum.