Formátování postů na blogu z databáze
- theacastus
- Člen | 81
Ahoj,
řeším teď ke svému blogu jak z databáze tahat nějak nastylovaný text (obsahuje HTML), Latte je ale fakt super a všechny html tagy a další spešl znaky mi escapuje :/ což je fajn, ale teď ne.
Tj. mám někde vypnout pro post na blogu escapování dat (z Databáze – museli by se kontrolovat před uložením) a nebo si vymyslet nějaké znaky které by se přes str_replace nahrazovali za určité HTML tagy se styly přímo Latte ?
Nebo jsem úplně mimo a dělá se to jinak ?
Díky moc :)
- Jan Endel
- Člen | 1016
Best practice je použít něco jako Texy tedy že je to nastylováno pseudojazykem. Nejdřív ho musíš zaregistrovat do nette jako filter:
/** @var Nette\Templating\Template $latte */
$latte = $template->getLatte();
$latte->addFilter('texy', function ($input) {
$html = new Nette\Utils\Html();
return $html::el()->setHtml($texy->process($input));
});
a pak v šabloně takto:
{$text|texy}
Editoval Jan Endel (25. 1. 2017 23:51)
- GEpic
- Člen | 566
Při ukládání postu do databáze escapuju značky jako <? ?>, {, },… za html entity
Pak se nemusíš bát takového výpisu:
{$obsah|noescape}
Editoval GEpic (26. 1. 2017 7:52)
- theacastus
- Člen | 81
Díky za odpovědi,
docela mě zaujalo texy, dá se kombinovat s trunctate apod. zas jsem nějakou dobu na latte nesáhl.
Co se týče noescape, to vypadá fajn a dalo by se to hezky použít. Jen váhám co vše filtrovat při ukládání do db. Ale je fakt že to co jsi použil ty @GEpic vypadá dobře. Můžu poprosit o příklad ? :)
Děkuju
- GEpic
- Člen | 566
theacastus napsal(a):
Díky za odpovědi,
docela mě zaujalo texy, dá se kombinovat s trunctate apod. zas jsem nějakou dobu na latte nesáhl.
Co se týče noescape, to vypadá fajn a dalo by se to hezky použít. Jen váhám co vše filtrovat při ukládání do db. Ale je fakt že to co jsi použil ty @GEpic vypadá dobře. Můžu poprosit o příklad ? :)
Děkuju
Promiň, ale vzhledem k mínusům a k tomu, že správný neťák musí nejspíš používat co nejvíce knihoven a nedokáže mi nikdo ani napsat, proč to, co jsem napsal, je špatné. Tak si to asi radši vezmu do hrobu. :)
Přitom by stačila jediná odpověď (protože i já se rád poučím), když už dostávám mínusy jak v diskuzi na novinkách.
Pokud je důvodem XSS, tak to snad nemyslíte vážně. :)
PS:
Chápu, že máte TEXI rádi, ale kdybych s tím měl učit své klienty, tak
mě z nich 98% pošle do pr**** :).
Editoval GEpic (26. 1. 2017 18:36)
- David Matějka
- Moderator | 6445
@GEpic ano, predpokladam, ze duvodem minusu je xss.
ano, v tomhle pripade, kdy je to nejaky vlastni blog, kam nevklada obsah nikdo jiny, je to ok, ale neni dobry to doporucovat univerzalne.
btw, tvoje escapovani <?
a {
je zcela zbytecny,
latte ten obsah jen vypisuje, nijak ho neinterpretuje
a k texy: to muze slouzit jen jako sanitizer dat
- CZechBoY
- Člen | 3608
GEpic napsal(a):
Při ukládání postu do databáze escapuju značky jako <? ?>, {, },… za html entity
Pak se nemusíš bát takového výpisu:
{$obsah|noescape}
Ano, kvůli XSS. Taky kvůli tomu že escapuješ bez kontextu, escapovat by
se mělo při výpisu (znám kontext).
A proč to takhle moc řešit, když existuje alternativa – nemusim psát
html (to samozřejmě s html wysiwyg taky ne) a nemusím řešit
bezpečnost – dělá to za mě knihovna.
btw. myslím, že na texy existuje taky wysiwyg editor