Je to luknja?
3 naročniki
3 naročniki
Živjo mojstri!
Napisal sem primer, za katerega me zanima ali je luknjast oz. ali lahko kak zlobnež pokliče kakšno neželjeno funkcijo. Jaz mislim da je ok.
Hvala za vaša mnenja :)
Primeri klicev:
http://localhost/test.php
http://localhost/test.php?action=test
http://localhost/test.php?action=blaaaa
<?php
class Mama
{
protected $action;
protected function indexAction(){
return 'index akcija';
}
public function handle()
{
if(empty($this->action))
{
return $this->indexAction();
}
if(preg_match('/^[a-z_0-9]+$/i', $this->action))
{
return $this->{"{$this->action}Action"}();
}
}
public function __call($name, $args)
{
return 'Akcija <b>'.htmlspecialchars($name).'</b> ne obstaja.';
}
}
class Test extends Mama
{
public function __construct()
{
if(isset($_GET['action']))
{
$this->action = $_GET['action'];
}
}
protected function testAction(){
return 'test';
}
}
$test = new Test();
print($test->handle());
?>
4 odgovori
Po hitrem pregledu, razen neenakomernega code styla :P, jaz ne vidim problemov.
Offtopic: A Symfony2 components stuff je bil preveč? Ker avtor sedaj piše bloge s navodili kako ji uporabiti..
Kje pa vidiš, da uporablja oz. želi uporabljati Symfony2 ?
blackmamba: Jaz osebno, bi raje uporabil method_exists funkcijo.
@krho: Hehe, s code stylom sem se res 10 min zafrkaval, da sem vse text indente s presledki naredil itd, ekstra sem se še potrudil z { in \n{ ,ampak tebi nič ne uide :)
Nazadnje, ko si mi predlagaly Symfony2 si mi dal ogromno zanimivega branja in danes tudi, thx! Nekaj komponent sem tudi uporabil.
Routing komponente ne morem uporabiti, ker moj sistem generira url-je na drugačen način in do klica kontrolerjev je druga pot(podobna, ampak drugače :)).
Zgornji primer sem si izmislil samo za IM, da sem lahko približno razumljivo vprašal kaj me zanima.
@Slim: Pomojem je posumil na Symfony2 zaradi indexAction() :)
Se strinjam, __call() ni primarno namenjen za ugotavljanje ali funkcija obstaja. Tukaj pokličem default funkcije, kar sem v primeru zbrisal.