Autor Zpráva
An
Profil *
Dobrý večer, jen se chci zeptat, zda-li je následující kód bezpečný, zda-li ne, jak byste ho upravovali. Děkuji

    // set - page title
    $page = htmlspecialchars($_GET["page"]);
    // set - default path
    $dir = "";
    // set - default page
    $homePage = "rozcestnik.php";
    
    // if there is a variable page
    if (isset($page)) {
    
        // correctly received data
        if (file_exists($dir.$page.".php") && !is_numeric($page) &&
            strlen($page)<=50)
            
            // provide the correct file
            include($dir.$page.".php");
            
            else { 
                
                // set - error page
                include $dir."404.php"; 
                
            }
            
    }
    
    // if there is'nt a variable page    
    else {                            
        
        // provide the default page
        include  ($dir.$homePage);
        
    }
DJ Miky
Profil
Není ošetřený třeba případ index.php?page=index.

Ošetření pomocí htmlspecialchars() ti moc užitku nepřinese.

Pak je lepší ošetřovat speciální znaky v názvu souboru (povolit např. jen [a-z0-9], aby si případný záškodník nemohl includovat kterýkoliv soubor), ještě lepší řešení je přímo vyjmenovat povolené stránky.

Podmínka isset($page) je úplně zbytečná, vždy vrátí true (proměnná $page bude existovat vždy). Nejspíš chceš kontrolovat, jestli v ní něco je, pak se ti budou hodit funkce strlen(), konstrukt empty() nebo prosté ověření if($page).
Tori
Profil
Když už bych dávala jméno skriptu do URL, tak bych všechny "moduly" uložila do samostatného adresáře - tím odpadá kontrola povolených názvů.
    // pokud je stránka v URL, vyhodíme nepovolené znaky. Jinak použijeme výchozí.
    $page = isset($_GET['page']) ? preg_replace('/[^a-z\d_-]+/i', '', $_GET['page']) : 'rozcestnik.php';
    // Cesta k adresáři s includovanými stránkami
    $dir = "moduly";
    
    if (file_exists("$dir/$page.php"))
        include("$dir/$page.php");
    else  {
        @header("HTTP/1.0 404 Not Found");
        include("$dir/404.php");
    }
Medvídek
Profil
Já osobně všem includovaným suborům dávám podtržítko :)

if(file_exists("_".$_GET["stranka"].".php")) include ......

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0