Jak na bezpečené Texy – pouze formátování textu

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
motorcb
Člen | 552
+
0
-

Zdravím,

mám diskusi kde chci povolit Texy pro všechny uživatele.

    protected function createTemplate( $class = NULL )
    {
        $template = parent::createTemplate( $class );
        $template->registerHelper( 'dayNameShortCZ', callback( new \DateCZ(), 'getShortDayName' ) );

        $texy = new Texy();
        //Texy\TexyConfigurator::safeMode($texy);
        $template->registerHelper('texy', callback($texy, 'process'));

        return $template;
    }

Latte:

{!$texyContent|texy}

Je tento způsob bezpečný? Nechci aby uživatelé vkládali odkazy, JS. Aby mohli pouze formátovat text, popřípadě vkládat obrázky. Jak na to?

Díky

MartinitCZ
Člen | 580
+
0
-

Není. Vykřičník je problém.

David Matějka
Moderator | 6445
+
+3
-

TexyConfigurator::safeMode by mel vstup zabezpecit dostatecne, viz kod (pripadne si pak muzes zcela vypnout podporu tagu, odkazu atd.)


co se vypisovani v latte tyce, misto vykricniku by se od 2.1 mel pouzivat modifikator |noescape

{$content|texy|noescape}

nebo muze helper vracet Nette\Utils\Html

$template->registerHelper('texy', function($text) use($texy) {
	return \Nette\Utils\Html::el()->setHtml($texy->process($text));
});

pak nemusis v sablone vypinat escapovani

Editoval matej21 (19. 8. 2014 15:55)