| 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: 15 let
|
|||
0