Autor | Zpráva | ||
---|---|---|---|
An Profil * |
#1 · Zasláno: 29. 6. 2011, 20:12:25
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 |
#2 · Zasláno: 29. 6. 2011, 20:22:13
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 |
#3 · Zasláno: 29. 6. 2011, 21:03:15
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 |
#4 · Zasláno: 29. 6. 2011, 21:09:26
Já osobně všem includovaným suborům dávám podtržítko :)
if(file_exists("_".$_GET["stranka"].".php")) include ...... |
||
Časová prodleva: 14 let
|
0