Autor | Zpráva | ||
---|---|---|---|
dEv3lo Profil * |
Už se tu projednávalo proniknutí ochranou v include ale ve všem jsem viděl nějaký nedostatky ale zato moje řešení nepotřebuje takoví věci jako jiní a jsou snad i spolehliví! :)
Nevím, zda to je nějak napadnutelný a vím že by se zvýšila bezpečnost kdyby byli stránky uožené v adresáři- npř. @include "stranky/".$_GET['stranka'].".php"; Taky tu uvádím soubor uložený na ulozto.cz, v něm je celí pokus.Odkaz Hodně se hodí pole ve kterém jsou povolené stránky a které se může třeba využívat na oprávnění v CMSku, kde by bylo logicky sestaveno :). Takže tu prosím napište jestli by se dalo nějako toto zabezpežení nějak přelstít :). Taky budu rád i za komentáře ale nejsem zvědaví na ty komenty co se nebudou týkat kódu níže... :) Děkuji! d3vElo... <HTML><head><title>Pokus</title></head> <BODY> <div> <a href="?link=home" title="HOME">Hlavni stranka</a> <a href="?link=kontakt" title="Kotakt">Kontakt</a> </div> <?php function stranka(){ $stranky=array('home','kontakt'); if(!isset($_REQUEST['link'])||$_REQUEST['link']==''){ $stranka ='home'; }else{ $stranka = $_REQUEST['link']; } for($i=0;$i<=count($stranky);$i++) { if ($stranka==$stranky[$i]){ return $stranka; } } return 'upozorneninaneexistujicistranku'; } @include stranka().'.php'; ?> </BODY> </HTML> Stačil by mi také název na program ve kterém by se dala dobře projet bezpečnost webu - nemáte náhodou někdo typ? Nevíte co třeba používá na takovéto věci Yuhů? |
||
Nox Profil |
#2 · Zasláno: 24. 12. 2009, 10:46:06
z hlediska bezpečnosti je to myslím Ok, jen tím requestem jde asi pomocí postu přehlušit get...tedy proč request?
@=fuj místo cyklu můžeš použít jednodušší in_array() whitelist dát mimo funkci nemáš ošetřeno otestování, zda ten soubor existuje (file_exists())... kvůli tomu tam je asi ten zavináč, ale toto je lepší způsob |
||
Alphard Profil |
#3 · Zasláno: 24. 12. 2009, 11:01:42
dEv3lo:
Řešení, kdy je použit seznam povolených stránek, bývá bezpečné. To ale neznamená, že by to nešlo napsat lépe. $stranky = array('home','kontakt'); $stranka = empty($_GET['link']) ? 'home' : $_GET['link']; $stranka = in_array($stranka, $stranky) ? $stranka : '404'; include $stranka.".php"; file_exists() jsem vynechal, neočekávám, že v seznamu bude neexistující stránka. |
||
J. Profil * |
#4 · Zasláno: 24. 12. 2009, 13:06:43
Tak, "whitelist" je skutečně poměrně spolehlivým řešením.
|
||
imploder Profil |
#5 · Zasláno: 24. 12. 2009, 15:06:49
moje řešení (mělo by být naprosto bezpečné): http://bprhad.wz.cz/kousky/
|
||
dEv3lo Profil * |
#6 · Zasláno: 24. 12. 2009, 21:27:47
Děkuji za komenty, a ten soubor jsem si stáhl a samozřejmně ho louskám :-)
Šťastný a veselý! |
||
Majkl578 Profil |
#7 · Zasláno: 24. 12. 2009, 21:41:37
[#6] imploder
Doporučuji aktualizovat script, v současné době jsou ereg* funkce deprecated. Osobně bych to ale asi udělal trochu jinak: $page = 'default'; //výchozí stránka $path = dirname(__FILE__) . '/pages'; //složka se stránkami if (isset($_GET['page']) && preg_match('~^[a-z0-9_\-]+$~i', $_GET['page']) && file_exists("$path/{$_GET['page']}.php") ) { $page = $_GET['page']; } include "$path/$page.php"; Jestli se to generalizuje funkcí nebo ne je už jedno. |
||
Časová prodleva: 15 let
|
0