Automatické CSRF u „nebezpečných odkazů“
- Jiří Nápravník
- Člen | 710
Jak řešíte CSRF u „rizikových odkazů“. Psát u každýho mazání apod. vlastní formulář je jistě otrava, pak mě napadlo jeden formulář a měnit mu jen akci kam bude směrovat, kam bude směrovat. Ale to mi taky nepřijde úplně ideální. Je v Nette nějaké šikovné řešení, příp. kudy se ubírat? Vlastní makro?
- David Matějka
- Moderator | 6445
jo, makro, ktere prida k parametrum nejakej csfr token bude nejlepsi, jeste me napadlo prepsat v base presenteru metodu link ve stylu:
public function link($destination, $args = array())
{
if(isset($args['csrf')) and $args['csrf']==true) {
$token = vygeneruj_a_uloz_do_session_token();
$args['csrf'] = $token;
}
return parent::link($destination, $args);
}
v sablone by stacilo jen
<a n:href='Foo:bar id=>$id, csrf=>true'></a>
lepsi ale bude si napsat makro, ktere bude delat v podstate to same
overeni potom bud jednoduse
public function actionDefault($csrf)
{
$this->verifyCsrf($csrf);
}
nebo treba si tu metodu oznacit anotaci jako @protected
, prepsat
metodu checkRequirements a tam overit token
- Jan Tvrdík
- Nette guru | 2595
@Jiří Nápravník: Viz https://github.com/…tte/pull/469 a https://gist.github.com/hrach/1545209
- Jiří Nápravník
- Člen | 710
Díky za tipy všem
Jan Tvrdík: ten pull request jsem našel, ale přeci jen byl načatý před rokem a nějak se k jeho implementaci do Nette zatím nemělo, tak jsem to spíše ignoroval, ale ten druhý odkaz už je zajímavý. Díky
- Jiří Nápravník
- Člen | 710
Pouziju, ostatne Jan Tvrdik mi na ni poslal link (tu starší teda). Tu s traits nepouziju, nemam php 5.4 na serveru