Chyba – Latte filtry nejspíš špatně fungují, jelikož dělají více, než by měly

Bulldog
Člen | 110
+
+1
-

Ahoj, nezkoušel jsem je všechny.
Nicméně minimálně filtr breakLines dělá více věcí, než by měl.

Konkrétně tento kód:

{php $var = "<p>foo</p>\n<p>bar</p>"}
{$var|breakLines}

se přeloží do tohoto řetězce

&lt;p&gt;foo&lt;/p&gt;<br>
&lt;p&gt;bar&lt;/p&gt;

Místo požadovaného

<p>foo</p><br>
<p>bar</p>

Tedy v tomto případě filtr breakLines zároveň i escapuje daný řetězec místo toho, aby jen přidal <br> tag.

To je problém v případě, kdy přidání konce řádků přidat ještě další tagy, které nejsou postaveny jen na zrušení escapizace, ale hlavně na přidávání, jako například automatický překlad url adres a mailů na hypertext odkazy.
Najednou začne záležet na pořadí, protože musíte počítat s tím, že ta URL je nebo není escapovaná atp.

Může totiž nastat situace, že když to takto bude a na stejný princip bude fungovat i ten překlad URL adres, tak buď bude ten hyperlink escapovaný tím breakLines, nebo br tagy budou escapovány tím překladem url adres

Editoval Bulldog (4. 1. 2023 13:40)

MedaKeR
Člen | 8
+
0
-

Ahoj, je to standardní chování Latte. Viz https://latte.nette.org/cs/tags#…

Pokud chceš escapování zabránit, použij filtr noescape

MajklNajt
Člen | 470
+
0
-

neescapuje ti to filter breakLines, ale samotné latte – je to jeho (alebo jej, aby som bol genderovo nestranný) natívna vlastnosť: https://latte.nette.org/cs/safety-first#…

David Grudl
Nette Core | 8082
+
+1
-

Filtr breakLines nepodporuje na vstupu HTML, ale čistý text. Tak jako drtivá většina filtrů.

Bulldog
Člen | 110
+
0
-

@MedaKeR a @MajklNajt
Nemáte pravdu, jelikož zákaz escapování přes:

{php $var = "<p>foo</p>\n<p>bar</p>"}
{$var|breakLines|noescape}

Má úplně stejný výsledek a filter noescape v tomto případě nemá na vykreslení vliv a tedy nic nedělá, jelikož již řetězec vyjde escapovaný z filtru breakLines
Zkuste si toto:

{php $var = "<p>foo</p>\n<p>bar</p>"}
{dump ($var|breakLines)}

Výsledek bude:

Latte\Runtime\Html
    value:
        '&lt;p&gt;foo&lt;/p&gt;<br>
        &lt;p&gt;bar&lt;/p&gt;'

@DavidGrudl To chápu, ale nerozumím tomu, proč tedy vstup nebere jako plaintext, ale bere ho jako potenciální html a escapuje ho. Chápu, že když je to děláno tak, že generuje objekt Latte\Runtime\Html, které je ignorováno escapovacími funkcemi, tak kdyby nedělal escapování už breakLines, tak se pak escapování neprovede vůbec, ale právě kvůli tomu potom je do určité míry znemožněno použití dalších filtrů, jelikož se musí Latte\Runtime\Html objekt převést zpátky na text, ten zpracovat dalším filtrem a znovu vytvořit HTML objekt, což je náročné na výkon, musí člověk různě převádět HTML entity zpět a kdo ví co ještě, což tady ty úpravy komplikuje, výsledný kód je pomalý zbytečně kvůli neustálé konverzi tam a zpět a nakonec musíš ideálně vyjmenovat, které značky jsou zamýšlené a které ne, což je daleko horší, než explicitní vyjmenování, co se má escapovat, jak to má třeba TWIG.
Další problém spojený s tímto nechtěným escapováním je ten, že si pak nemůžu být jistý, jeslti řetězec &lt;p&gt;foo&lt;/p&gt; co jsem dostal je zamýšlený aby takto vypadal a jde o ukázku kódu a nebo jestli ho mám zpracovat jako paragraph.

Spíš bych si představoval, že by to neovlivňovalo zbytek textu, ale aby to dělalo jen to, co člověk očekává a to tedy že odřádkování nahradila/prefixovala HTML značkou <br>

Takový první nápad je, že by byla nová HTML entita (Nette\Utils\Html) například s názvem PlainText, která by znamenala, že obsah v ní je připraven na escapování, takže jakýkoliv filter by vracel stále nějaký HTML objekt, ale ten by měl v sobě ne text, ale strom tokenů:

Nette\Utils\Html
    attrs: array (0)
    children: array
        0 => Nette\Utils\Html\PlainText
            attrs: array (0)
            children: array
                0 => '<p>foo</p>'
            name: ''
            isEmpty: false
        1 => Nette\Utils\Html
            attrs: array (0)
            children: array (0)
            name: 'br'
            isEmpty: true
        2 => Nette\Utils\Html\PlainText
            attrs: array (0)
            children: array
                0 => '<p>bar</p>'
            name: ''
            isEmpty: false
    name: null
    isEmpty: null

A v případě, že přijde na vykreslení, tak by se obsah PlainTextu escapoval až při vykreslování.
Nevím vlastně, proč by tuhle schopnost neměl mít už klasický Nette\Utils\Html, kdy by escapování neprobíhalo při vytváření, ale až při vykreslování.

EDIT
Myslím tím, že by mohlo ve třídě Nette\Utils\Html být htmlspecialchars až ve funkci render a ne už ve funkcích addTextsetText

Editoval Bulldog (4. 1. 2023 17:29)

MajklNajt
Člen | 470
+
0
-

@Bulldog netvrdil som, že riešenie je použiť noeascape..

a keď na to pozrieme čiste prakticky, nenapadá ma žiadny use-case, kedy by som potreboval v HTML nahrádzať \n tagom <br> – ten tvoj príklad je logicky aj sémanticky nezmysel

EDIT: ale uznávam, mýlil som sa v tom, že to neescapuje filter breaklines

Editoval MajklNajt (4. 1. 2023 17:32)

Bulldog
Člen | 110
+
0
-

@MajklNajt

netvrdil som, že riešenie je použiť noeascape..

Tvrdil si, že že to neescapuje breakLines, ale až latte. A na to jsem správně reagoval, že to není pravda, jelikož už ten filter to vypíše escapované, což dokazuje i to, že filtr noescape nemá vliv. Asi nějaké nedorozumnění?

a keď na to pozrieme čiste prakticky, nenapadá ma žiadny use-case, kedy by som potreboval v HTML nahrádzať \n tagom <br> – ten tvoj príklad je logicky aj sémanticky nezmysel

Asi jsem se nikdy nenaučil význam příkladů. Myslel sem, že příklady by měly ukazovat problém a ne být sémanticky správně. (A taky jsme se učili, že sémantika je logika aplikace, nemáš tam redundanci?)
Samozřejmě, že tak <p> už sám odřádkován je, takže přidávat za něj odřádkování nedává smysl. Ale to snad nemá vliv na problém, že mi ten filtr escapuje i to, co by neměl ne? Jestli v příkladu použiji span, div, img nebo cokoliv jiného nemá vliv na problém. Problém je, že filtr escapuje ostatní HTML entity ne že potřebuju použít odřádkování za paragrafem…

USE case je, když máme input, kde mohou lidé psát komentáře a nechceme tam žádný editor, ale chceme dovolit základní věci, jako odřádkování a právě například automatický překlad odkazů na hypertexty, což se mi komplikuje tím, že mnou vytvořené a tagy to escapuje. Vše je v úvodním příspěvku.

Tedy pokud uživaatel do inputu vepíše toto: (Takže toto je plaintext vstup od uživatele a tedy toto je v databázi, co chci při výstupu filtry zpracovávat.)

Ahoj, tady máš odaz na seznam: https://www.seznam.cz/
A nezapomeň na naši domluvu

tak chci, aby výsledek vypadal takto:

Ahoj, tady máš odaz na seznam: seznam.cz
A nezapomeň na naši domluvu

a ne takto:
Ahoj, tady máš odaz na seznam: seznam.cz A nezapomeň na naši domluvu

a takto:
Ahoj, tady máš odaz na seznam: seznam.cz <br /> A nezapomeň na naši domluvu

ani ne takto
Ahoj, tady máš odaz na seznam: <a href=„https://www.seznam.cz/“>seznam.cz</a>
A nezapomeň na naši domluvu

Ale tohle všechno je úplně jedno. Příklad přesně popisuje, co mám za problém s filtrem breakLines pokud vím, tak nemusí přesně popisovat můj USE CASE…

Editoval Bulldog (4. 1. 2023 17:58)

David Grudl
Nette Core | 8082
+
+3
-

@Bulldog jako vstup to naopak bere pouze plaintext, který escapuje.

Bulldog
Člen | 110
+
0
-

David Grudl napsal(a):

@Bulldog jako vstup to naopak bere pouze plaintext, který escapuje.

Dobře. Tím sme si ujasnili, co kdo myslíme plaintextem. Ty myslíš text, který náleží nějakému konkrétnímu jazyku, který je reprezentován datovým typem string a já myslím sérii znaků nenáležící žádnému jazyku reprezentovanou libovolným datovým typem.

Otázka ale stále zní, proč je ten řetězec escapován uvnitř filtru a ne až na konci pro proběhnutí všech filtrů?

Editoval Bulldog (4. 1. 2023 17:52)

David Grudl
Nette Core | 8082
+
+1
-

Protože ten filtr bere plaintext na vstupu a produkuje HTML na vystupu. Nic uz se pak neescapuje.

Bulldog
Člen | 110
+
0
-

Ok. Jak jsem psal výše, rozumím tomu, že když generuje HTML (jelikož tam přidá html tag), tak chce, aby výsledný html byl validní.

Atále ale nerozumím tomu, proč dělá dvě věci :D Proč se o nahrazení znaku nového řádku nestárá prostě filtr breakLines a o escapování třeba filter escape, který by se třeba volal automaticky to je fuk, ale volal by se až potom. :D

Ale koukám, že to je cesta slepou uličkou. Tak se zeptám jinak.

Existuje prosím i jiná metoda, jak pouze nahradit znaky nových řádků za <br> aniž bych musel použít výchozí PHP funkci nl2br, jejíž výsledek stejně budu muset parsovat, aby Latte neescapovalo i to <br>, nebo si psát vlastní tokenizer?

EDIT
Ono to, že na výstupu generuje HTML není úplně odpověď na mou otázku totiž. HTML na výstupu by to bylo i bez toho escapování. Spíš jde o to, proč se escapuje místo toho, aby bylo nějak jinak zajištěno, že <br> značky jsou jediné platné HTML tagy a to tak, aniž by se zasahovalo do zbytku textu.

Editoval Bulldog (4. 1. 2023 18:59)

Martk
Člen | 651
+
0
-

Co je špatně na {nl2br($var)|noescape}? Vždyť to dělá přesně to co |breaklines akorát bez htmlspecialchars https://github.com/…/Filters.php#…

Bulldog
Člen | 110
+
0
-

@Martk To, že nechci, aby byly všechny tagy povoleny, takže chci escapovat všechny, kromě <br> a jiných vybraných s tím, že pokud někdo napíše tento text:

Lorem ipsum dolor <br> sit amet,
consectetuer adipiscing elit.

Tak výsledný očekávaný řetězec by měl být:

Lorem ipsum dolor &lt;br&gt; sit amet,<br>\nconsectetuer adipiscing elit.

což nebude, protože to co píšeš by to zachovalo i uživatelský vstup a výpis by tedy nevypadal takto:
Lorem ipsum dolor <br> sit amet,
consectetuer adipiscing elit.

ale takto:

Lorem ipsum dolor
sit amet,
consectetuer adipiscing elit.

Což je nechtěnné.

A dopředné escapování pomocí htmlspecialchars taky není na místě, protože mi to escapuje například speciální zápisy E-mailů a jiné speciální sekvence, s čímž chci taky pak nějakým způsobem pracovat a proto potřebuji escapování až na konci.

Editoval Bulldog (4. 1. 2023 19:24)

Kamil Valenta
Člen | 752
+
+1
-

Bulldog napsal(a):

To, že nechci, aby byly všechny tagy povoleny, takže chci escapovat všechny, kromě <br> a jiných vybraných s tím, že pokud někdo napíše tento text:

Lorem ipsum dolor <br> sit amet,
consectetuer adipiscing elit.

Tak výsledný očekávaný řetězec by měl být:

Lorem ipsum dolor &lt;br&gt; sit amet,<br>\nconsectetuer adipiscing elit.

Tohle ale popírá Tvůj první post, kterým jsi to vlákno začal.

EDIT: jakkoli se mi z počátku zdály Tvé myšlenky jasné, teď to trochu zamotáváš, protože najednou se ptáš po filtru, který escapuje jen něco a něco ne. A to je dost specifická věc, kterou by sis měl řešit vlastním filtrem.

Editoval Kamil Valenta (4. 1. 2023 19:53)

Bulldog
Člen | 110
+
+1
-

@KamilValenta

Tohle ale popírá Tvůj první post, kterým jsi to vlákno začal.

Myslím, že nepopírá. Pořád platí to stejné a to, že si myslím, že filtr, který přidává <br> před znak odřádkování by měl dělat přesně a jen pouze tohle a ne nic dalšího escapovat.

O tom celá myšlenka je. To, že já zrovna potřebuju něco escapovat nebo ne není pointou toho, co v tomto vlákně chci sdělit. Jen to jsou odpovědi na otázky, které nesouvisejí s postem, jelikož neřeší podstatu problému jako takového.

Celá myšlenka je taková, že když přijde text z uživatelského inputu, tak se jedná ve výchozím stavu o plaintext, jak píše DG a je úplně jedno, jestli autor text zamýšlel jako Javascript, HTML, CSS, latinu, angličtinu, španělštinu, nebo jen náhodnou změť symbolů.

Filtry by potom měly dělat tu věc, že vstup nějak pozmění, ale neměly by automaticky počítat s tím, že tam už něco z toho je. Respektive když bude jako vstup důvěryhodný text, například od majitele webu, který opravdu nemá v úmyslu hackovat své vlastní stránky a nebo na své klienty útočit pomocí XSS, ale tento nechce vždy psát <br>, když chce odřádkovat, ale chce jen prostě dát enter, ale v krajních případech chce použít čisté HTML pro nějaké konkrétní účely, tak zde by bylo na místě použití {nl2br($var)|noescape} jak píše Martk
V případě ale, že jde o text z veřejného formuláře, tak musíme počítat s tím, že něco je pokus o útok a něco ne. V obou případech ale opět chceme aplikovat nl2br filtr pro dosažení stejného výsledku, ale zakázat jim používání HTML tagů, což dá rozum. Toho zase dosáhneme nejlépe tím, jak to má aktuálně Nette a tedy nejdřív odstraníme HTML tagy z potenciálního HTML kódu pomocí htmlspecialchars a následně vložíme BR tagy tam, kde potřebujeme odřádkování pomocí nl2br. To je na první pohled správná cesta, protože výsledek bude pouze ty BR tagy, kde je chceme.

Problém nastane, když existuje druhá nezávislá knihovna, která tuhle myšlenku, která člověka napadne jako první aplikuje taky a bude tu třeba filtr konvertující znaky >:( na 😠.
V tento moment fakt, že filtr pro zalomení řádků nejdřív escapuje HTML entity znemožní vykreslování emoticons, pokud filtr na emotikony bude aplikován jako druhý v pořadí.

A když se stane a použijeme filtr, který například z ---Foo--- udělá <h1>Foo</h1>, ale nejdříve zavolá escapování HTML entit a to stejné pak udělá filtr nl2br, tak se dostaneme do nekonečné smyčky, která buď znemožní použití filtru na nadpisy, nebo filtru na odřádkování.
A myšlenka je pořád stejná. FILTR BY MĚL DĚLAT JEN JEDNU VĚC. Tedy si myslím, že nl2br by měl zajistit, aby v daném textu byly <br> tagy tam, kde je odřádkování. To, že jsou někde jinde další tagy by ho nemělo zajímat, ovšem pro pozdější použití by měl možná nějak označit, které <br> tagy jsou od něj.

To, že nakonec klidně může proběhnout escapování nebo ne je pro tento post úplně jedno. Jen by mohlo být označeno, který HTML kód jsem vygeneroval já a který dal uživatel.


Odpovědi, které tě možná matou znamenají, že pokud na tom escapování extra sejde už v tom filtru breakLines, tak podle mě jsou cesty minimálně 2 a to nejdříve escapovat všechny <br> tagy (a POUZE <br> tagy), které jsou v textu a poté až nahradit nové řádky za <br>, tedy z <span>foo</span> <br> bar \n baz udělat <span>foo</span> &lt;br&gt; bar <br>\n baz, nebo z toho udělat strom s tokenama viz předchozí příspěvek
Druhá možnost mi přijde lepší, protože pouhým přetypováním na string, nebo výpisem dojde ke všemu, co je třeba a nedochází opět k nějakému magickému escapování na pozadí a tedy je zachovaná možnost, že se escapovat nemusí vůbec.
To ale ovšem neznamená, že zároveň nechci a zároveň chci aby ten filtr escapoval. :D Jen když se na to lidi ptají, tak nabízím alternativy a ukazuji důvody, proč dané řešení není OK, jelikož není univerzální… A opět si myslím, že nástroje jako jsou Frameworky by univerzální být měly, aby nám pomohly napsat JAKÝKOLIV projekt. Pokud mohu použít FW jen na něco a na něco ne, tak pak nevidím důvod jej používat, když to stejně musím psát…

Nicméně za mě je úplně v pohodě escapování HTML entit na začátku, pak provedení všech filtrů a pak vypsání výsledku, nebo i opačný přístup, kdy se pomocí filtrů vytvoří tokeny, které říkají mě neescapuj já jsem již zamýšlené HTML a escapování proběhne nakonec. Dokonce jsem i za případy kdy escapování neproběhne vůbec. To je jedno.
Důležité je, aby filtry nedělaly záhadné escapování, nebo side efekty, které nejsou očekávané.

Co tím chci říct je to, že pokud se htmlspecialchars použije vždy před všemi filtry globálně, ale jen 1× a filtry se aplikují už na escapovaný text, tak je to za mě v pohodě.
Pokud se aplikují i na neescapovaný text a escapování proběhne až na konec je taky v pohodě.
Ale není v pohodě, abych musel psát kód tak, že jednou mi do filtru přijde escapované HTML protože někdo použil breakLines filtr, jindy mi přijde neescapované, protože ho někdo nepoužil a jindy aby mnou vygenerované HTML bylo escapované, protože filtr breakLines někdo použil až po mnou vytvořeném fitru.

To je jak hod mincí a nemyslím si, že takové náhodné věci by se v programování mely vyskytovat.

EDIT
A to, že jsem v předposledním příspěvku napsal

Což je nechtěnné.

Neznamená, že to tak nechci já osobně, ale že to vede ke zranitelnostem a to nechtěnné je obecně uznávaný fakt.

Editoval Bulldog (4. 1. 2023 21:19)

Martin Dřímal
Člen | 16
+
-4
-

To je něco jako třetí parametr in_array :) in_array($needle, $haystack, $strict = false), kde je výchozí strict=false a musí se mu explicitně říct „ale jako fakt in array, ne náhodně“. Tady by u breaklines taky mohl být kouzelný parametr, který by řekl „ale fakt jen breaklines, nic víc“ :)

Milo
Nette Core | 1283
+
+6
-

@Bulldog Psal jsi…

{php $var = "<p>foo</p>\n<p>bar</p>"}

Zařiď si ve svém kódu, aby už ve $var bylo <p>foo</p><br><p>bar</p> a break lines filtr tě nemusí zajímat. Jinak se snažíš vkládat HTML do HTML, ale to není triviální úkon nahrazení řetězce. Správně bys měl vytvořit DOM, najít textové uzly a ty zpracovat.

Co když ve $var bude <p\nclass="foo">foo</p>? To je validní HTML a tvé jednoduché nl2br ho rozbije.

David Grudl
Nette Core | 8082
+
+7
-

Atále ale nerozumím tomu, proč dělá dvě věci :D Proč se o nahrazení znaku nového řádku nestárá prostě filtr breakLines a o escapování třeba filter escape, který by se třeba volal automaticky to je fuk, ale volal by se až potom. :D

To je skvělý nápad! Breaklines tam vloží značky <br> a escapování z nich udělá &lt;br&gt;. Že mě to nenapadlo…

Polki nevypisuj tady litanie, jestli to umíš naprogramovat líp, tak to naprogramuj. Tečka.

Kamil Valenta
Člen | 752
+
+1
-

David Grudl napsal(a):

Polki nevypisuj tady litanie…

A teď už se to zamotává všechno :) Polki přece přestal před více jak půl rokem Nette používat, měli na to valnou hromadu :)
A Bulldog se v některých vláknech Polkiho zastával. Máme všichni jen jednu hlavu, ne?

Bulldog
Člen | 110
+
-2
-

S vámi je to těžké hoši :D

Místo aby jste si to přečetli, tak tu píšete pořád dokola ty stejné věci, které jsem už vysvětlil, nebo mi jako argument píšete to, co jsem už dávno já napsal…

To nemá úplně smysl tohle. A pak mi tu ještě říkáte, abych za vás dělal práci, na kterou vybíráte peníze? :D Výsměch.

A pro úplnost.
Polki byl náš šéf, než přišel s tím, že Nette už není ok a máme se ho vzdát. Nebyla žádná valná hromada. On byl šéf, tak svolal jen schůzku na které to oznámil, přičemž až na té schůzce jsme zjistili, že Polki je on. Jenže vzhledem k tomu, jaké množství projektů jsme již v Nette napsali, tak se změna neoplatila a výsledek byl ten, že firma u Nette zůstala a Polki se trhnul jinam a aktuálně pracuje na novém moderním frameworku, který bude pro všechny jazyky a bude v nich sjednocovat práci, aby se s nimi pracovalo stejně a případný přestup z jednoho jazyka na jiný aby byl plynulý a programátoři nemuseli se učit více věcí, jak fungují.

My jsme tehdy nechápali, proč se chtěl na Nette vykašlat, ale jak se teď nemáme na koho s těmito problémy obracet a musíme tedy psát přímo na fórum, tak když vidím, jak je komunita nechápavá, arogantní a toxická, tak se mu ani moc nedivím.

Prosím tedy taky o zrušení mého účtu, být zapomenut, a výmaz osobních údajů, což jsou i všechny příspěvky a texty v nich obsažené, jelikož pomocí nich a svých názorů v nich jsem identifikovatelný.

Editoval Bulldog (5. 1. 2023 20:27)

David Grudl
Nette Core | 8082
+
+10
-

Polki, ty prostě nemůžeš být zapomenut. Jsi nezapomenutelný :)

Milo
Nette Core | 1283
+
+4
-

…jak je komunita nechápavá…

X lidí se tě tu snaží přesvědčit, že tvoje myšlenkové pochody jdou špatným směrem a ty stále dokola omýláš to samé a přidáváš k tomu akorát víc omáčky. Třeba tohle:

…nerozumím tomu, proč tedy vstup nebere jako plaintext, ale bere ho jako potenciální html a escapuje ho…

David ti na to odpověl. A já zkusím znova, obšírněji.

V PHP existuje pouze nativní typ string. A ty se nemůžeš spolehnout na to, co obsahuje. Je to HTML, je to XML, je to JSON? Nevíš. A protože PHP funkce nl2br() vkládá HTML značku, její výstup už je HTML. Ale zase vrací jen string. A ten když předáš do další funkce, tak ta funkce zase sama neví, jestli to je HTML, XML nebo cokoliv dalšího. To musíš hlídat ty a takhle vznikají díry v aplikaci.

Ale breakLines není PHP, je to Latte a Latte je bezpečné. A protože výstupem breakLines je HTML, musí si být filtr jistý, že to výstupní HTML je bezpečné, proto vstup escapuje.

Chceš univerzální řešení? Zkus breakLines filtr přepsat tak, aby akceptovat Html objekt a nl2br() udělal v něm.

Chceš si udělat díru v aplikaci? Napiš si vlastní filtr, který udělá jen nl2br() a pak stále budeš muset přemýšlet, jestli je vstup bezpečný, nebo ne.

Bulldog
Člen | 110
+
-1
-

Tak znovu a stručněji v bodech, když máš s pochopením delších vět problém.

  1. Nejsem Polki.
  2. Být zapomenut je moje právo vycházející z GDPR, též nazývané jako ‚právo na výmaz‘
  3. Znovu prosím, aby si tedy dodržel svou zákonnou povinnost a vymazal, nebo anonymizoval bez zbytečného odkladu VŠECHNY mé osobní údaje, načež se dovolávám svého práva na výmaz na tomto webu a VŠECH přidružených.
  4. Upozorňuji, že anonymizace NENÍ změna nicku, pokud je nový nick unikátní.
Milo
Nette Core | 1283
+
+1
-

GDPR je o nakládání s osobními údaji. Ty tady máš někde své osobní údaje? Jméno, příjmení, adresa, e-mail, datum narození? Myslíš si, že když začneš strašit internetu, aby všechno smazal, že to internet udělá? Keše a archivy?

Bulldog
Člen | 110
+
-3
-

@Milo
Promiň předchozí příspěvek není na tebe.

Milo napsal(a):
Chceš univerzální řešení? Zkus breakLines filtr přepsat tak, aby akceptovat Html objekt a nl2br() udělal v něm.

Děkuju, tohle je přesně to, na co se snažím celou dobu poukázat a navrhnout jako možné řešení. Jsem rád, že to konečně shrnul někdo schopný.

Chceš si udělat díru v aplikaci? Napiš si vlastní filtr, který udělá jen nl2br() a pak stále budeš muset přemýšlet, jestli je vstup bezpečný, nebo ne.

Nebude díra, pokud se vstup bude automaticky escapovat dopředně, tedy před všemi filtry. Ale rozumím, že je to složité na implementaci a tak to zůstane jak je.

EDIT

GDPR je o nakládání s osobními údaji. Ty tady máš někde své osobní údaje? Jméno, příjmení, adresa, e-mail, datum narození? Myslíš si, že když začneš strašit internetu, aby všechno smazal, že to internet udělá? Keše a archivy?

Osobní údaj je všechno, podle čeho můžu být identifikovaný. Tedy E-mail, přezdívka, názory, IP adresa a další věci, které o mě shromažďujete.
To, že zrovna ty, nebo většina komunity si to se mnou nespojí neznamená, že neexistují lidi, kteří ano, což znamená, že když někdo fakt chce, tak si mě spojí s tímto účtem a tedy jsem podle těchto údajů identifikovatelný, což znamená že ano, mám zde uložené osobní údaje.

Editoval Bulldog (6. 1. 2023 10:26)

Marek Bartoš
Nette Blogger | 1146
+
+11
-

To jak si GDPR interpretuješ je tvoje věc.
V praxi začíná a končí odstranění tím, že poskytoval služeb anonymizuje osobní údaje, které aktivně shromažďuje. A například email random123@seznam.cz je podle GDPR považován za anonymní a taková změna stačí.
Na smazání příspěvků, které jsi sám vložil právo nemáš. GDPR speciálně pro tenhle případ obsahuje výjimku, protože výmaz narušuje flow konverzací a tedy je problematický pro svobodu projevu a přístupu k informacím Článek 17, bod 3
Příspěvky jiných uživatelů obsahující tvůj nick jsou považovány za žurnalistické, akademicky umělecké či literální vyjádření a právo na výmaz se na ně rovněž neaplikuje. Článek 85

Pavel Kravčík
Člen | 1180
+
0
-

Ale bylo to pěkné, kdyby GDPR zajišťovalo také právo na to, aby nikdo nemohl zjistit, že se na internetu chovám anonymně jako vokurka. :)

David Grudl
Nette Core | 8082
+
+15
-

Polkimu / Bulldogovi jsem (opět) vyhověl v míře vyžadované GDPR. Z jeho účtu jsem smazal osobní údaje a znemožnil se k němu přihlásit.

Při dalších jeho pokusem registrovat se na toto fórum budu jeho budoucím žádostem vyhovovat již dopředně a účty deaktivovat ihned.

Je správné lidem vycházet vstříc.