Zdravím,
Chtěl bych použít příkaz include pro vkládání obsahu do webu, ale nevím jak vytvořit menu tak, aby mi odkazy spouštěli pouze příslušné include v hlavním obsahu webu.
Za každou radu předem děkuji!!
přikládám url pro ukázku http://www.procne.chytry.cz/validita/Index2.php
Fórum › PHP
PHP místo framů
To Luďas : Je to jednoduché. Odkaz v menu daj vždy v tomto formáte (uvádzam svoju verziu includovania):
?pg=subor_ktory_includujes
Do oblasti na stránke, do ktorej budeš includovaťsvoje súbory daj tento kód:
<?php
if(isset($_GET['pg']) and file_exists("./inc/".$_GET['pg'].".php"))
{
include("./inc/".$_GET['pg'].".php");
}
elseif(!isset($_GET['pg']))
{
include("./inc/default.php");
}
else
{
include("./inc/error404.php");
}
?>
Toto funguje perfektne v prípade, že všetky súbory máš v zložke /inc a okrem iného sú tam súbory default.php (súbor, ktorý sa includne vtedy, ak nie je daný nijaký iný súbor) a error404.php (pre prípad, že užívateľ zadá stránku, ktorá neexistuje).
V menu odkazoch vlastne predávaš parametre $_GET['pg'], čo je označenie stránky bez prípony .php .
bacha na to, je docela nebezpecny nechat uzivatele includovat jakoukoli stranku...ja bych to resil nejak takto:
$site= array();
$site["default"]="default.php"
$site["login"]="login.php";
$site["register"]="register.php"
//...
if(isset($site[$get["pg"]])
{
include($site[$get["pg"]])
}
else
{
include($site["default"])
}
snad tam neni moc preklepu :)
To Arg : Nj, osobne by sa mi asi nechcelo aktualizovať také obrovské pole stránok. Keď ide o menšiu webovú prezentačku, tak v pohode, ale ak je to web so 100 podstránkami a položkami menu, tak volím moje riešenie. A malo by to byť ošetrené tak, že možnosť php injekcie je nepravdepodobná.
To pawlik : Väčšina hostingov to má ošetrené jednoducho tak, že nie je možné pristupovať k zložkám, na ktoré nemáš práva. Takže toto nejak neriešim. Zatiaľ sa mi mojimi útokmi na vlastné aplikácie nepodarilo takto poškodiť dáta. Väčšina hostingov je predsa na linuxe, nie? ;)
Tocimanko
Tvoji víru v to, že to bude kočírovat hosting bych chtěl mít. Moc se mi líbí tvůj způsob uvažování -- "It's not bug, it's a feature." :o) V některých případech by se s tím dalo souhlasit, ale tohle je opravdu bezpečnostní chyba. Pokud např. budeš na stránky pak umožňovat upload souborů, útočník si tam nahraje záškodnický skript a už se to s tebou veze. Chybám je lépe předcházet než říkat, že tohle stejně nepůjde nijak využít.
A pokud mluvíš o tom, že takhle je to jednodušší (stačí nahrát soubor a hurá, jedeme), jde to pořešit automatickým přegenerováváním toho pole pokud se obsah složky změnil.
To bukaj : Prečo by som mal povolovať upload nebezpečných súborov? :D To sa dá jednoducho odfiltrovať ;) Zatiaľ som nikdy nepovoloval PHP súbory - to by som musel byť šialenec ;) ... Ja si nekomplikujem zbytočne život :) Keď vidím, že mi to nemôže ublížiť, neriešim ďalej. Všetko istí dôkladná analýza. Ak je pre útočníka nemožné využiť metódy, ktoré by mohli uškodiť, nevadí mi to. A keď sa chlapec o niečo pokúsi, tak mu vyhodí #404 :P Netvrdím, že je to zabezpečené dokonale. Aj možnosť s predgenerovaným polom je prípustná :))) Ale zas je to len komplikovanie :DDDD
Hoď sa do kľudu, pusti si ľahučké audio a mysli na niečo pekné :D
Tocimanko
Prečo by som mal povolovať upload nebezpečných súborov? :D To sa dá jednoducho odfiltrovať ;)
Jednoduše odfiltrovat? Mohl bych znát ten recept? :o)
Hoď sa do kľudu, pusti si ľahučké audio a mysli na niečo pekné :D
Já jsem naprosto v klidu. Jenom nechci, aby si z tebe někdo bral příklad ;o)
To bukaj : :smile5: :smile6:
Prečo by som mal povolovať upload nebezpečných súborov? :D To sa dá jednoducho odfiltrovať ;)
Jednoduše odfiltrovat? Mohl bych znát ten recept? :o)
Prepáč, ale doporučujem zakúpiť si nejakú poriadnu knižku o PHP ;) :D Ak nevieš odfiltrovať nebezpečné prípony, nemám s tebou o čom ;) Nie, recept sa dá vygoogliť.
Hoď sa do kľudu, pusti si ľahučké audio a mysli na niečo pekné :D
Já jsem naprosto v klidu. Jenom nechci, aby si z tebe někdo bral příklad ;o)
No, stále lepšie, než si brať príklad z teba. Ehm, vážne niektoré veci doštuduj. Nič v zlom!
Co je těžkého na zjištění přípony? Je víc způsobů, já bych použil tento:
$nazevSouboru = "ahoj.php";
$priponaSouboru = strstr($nazevSouboru, "."); //vypíše tečku a vše za ní, čili v tomto případě ".php"
if($priponaSouboru == ".php") {
die("Nesmíte nahrávat PHP skripty!");
}
Ajajajaj. Dalsi pan udelejte-to-pekne-prosim-za-me : :smile15:
To Tocimanko : Ach, ommlouvám se, máš pravdu. Takhle by to mělo být lepší:
$nazevSouboru = "ahoj.php";
$priponaSouboru = strrchr($nazevSouboru, "."); //vypíše tečku a vše za ní, čili v tomto případě ".php"
if($priponaSouboru == ".php") {
die("Nesmíte nahrávat PHP skripty!");
}
:smile1:
Tocimanko
Ak nevieš odfiltrovať nebezpečné prípony, nemám s tebou o čom ;)
Dobře, uznávám, měl jsem si pořádně přečíst kód, který jsi napsal. V tomto případě by opravdu stačilo odfiltrovat příponu. Ale jelikož se mnou "nemáš o čom", radši tento příspěvěk ani nečti.
vymyslel jsem vylepšení, díky kterému by se to dalo bezstarostně použít. Napsat
include("./inc/_".$_GET['pg'].".php");
a soubory se budou jmenovat _soubor.php.
Díky tomu ani nejde jít do adresáře zpět(udělalo by to inc/_../../soubor.php)
jen několik poznámek a pak zamykám ;)
1) kod od tocimana lze jednoduse fixnout: $page = str_replace('../', '', $page);
2) oba dva zpusoby maji vyhody i nevyhody
3) jakkykoli upload od uzivatele je potencialne nebezpecny... a ty pripony... to muze byt jedno...
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Podstrčení png místo php — založil petr
Načtení framu z jiného formuláře — založil Base
C# zdrojový kód stránky ve framu - webBrowser — založil cniry
? místo diakritiky — založil A
Volné místo Testera — založil remmidemmi
Moderátoři diskuze