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";
a taky vím že by se nemělo používat request atd...
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
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
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 *
Tak, "whitelist" je skutečně poměrně spolehlivým řešením.
imploder
Profil
moje řešení (mělo by být naprosto bezpečné): http://bprhad.wz.cz/kousky/
dEv3lo
Profil *
Děkuji za komenty, a ten soubor jsem si stáhl a samozřejmně ho louskám :-)
Šťastný a veselý!
Majkl578
Profil
[#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.

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: