Formátování postů na blogu z databáze

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

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
+
+5
-

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
+
-3
-

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
+
0
-

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
+
0
-

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
+
0
-

@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
+
0
-

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

GEpic
Člen | 566
+
0
-

@CZechBoY, @DavidMatějka autorovo use-case byl jasný, proto |noescape, přece by si nikdo nehackoval vlastní blog, každopádně je dobré o XSS vědět a tím jsem nechtěl někoho nabádat k tomu, dělat nějaké prasárničky.

Editoval GEpic (27. 1. 2017 1:51)

CZechBoY
Člen | 3608
+
0
-

@GEpic Sám si to třeba nechce hackovat, ale bude chtít napsat nějaký znak se speciálním významem a pohroma je na světě.