Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: exkalibr 10. 10. 2019, 07:32:30

Název: Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: exkalibr 10. 10. 2019, 07:32:30
Chci se zeptat jestli stačí ze vstupních dat formuláře na straně serveru odstranit znaky &, <, > a lomítka. Data se ukládají do txt souboru, takže nepoižívám sql příkazy. Nebo jak předejít útoku XSS.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Ondřej Kolín 10. 10. 2019, 08:57:26
Mozna shanis neco jako:
https://www.php.net/manual/en/function.html-entity-decode.php

Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: exkalibr 10. 10. 2019, 09:24:55
Tomu bych se chtěl vyhnout. Co se stane, když uživatel začne odesílat hromadu značek jako: &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& nedojde zachvíli k tomu, že budu mít tolik množství textu, které budu muset analyzovat? To bude zpomalovat běh serveru a zbytečně zabírat místo na disku. Jenom ta sekvence nahoře zabrala 455 znaků. Došlo k pětinásobnému prodloužení textu. Proto bych ty znaky buďto rád odstranil, aby je nebylo možné použít nebo zastavil uživatele, že použil nepovolené znaky. Nechci ukádat věci, které nepoužívám.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: to_je_jedno 10. 10. 2019, 09:27:39
tvl místo na disku resit v roce 2019 pokud jde o user input a ne media?
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: exkalibr 10. 10. 2019, 09:33:54
tvl místo na disku resit v roce 2019 pokud jde o user input a ne media?

Jenže se nejedná o placený hosting kde máš 5 GB prostoru, ale hosting zdarma s omezeným množstvím prostoru. Vždycky je lépe mít méně dat než více, urychluje to hledání v textu.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: to_je_jedno 10. 10. 2019, 10:00:03
stejne... vis kolik stran textu se vejde do 1MB? To je naprosto irelevantni tohle resit. To je jako kdybys setril misto v mysql tim, ze nepouzijes utf8mb4 ale misto toho tam budes sypat jen ascii.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Standa Blábol 10. 10. 2019, 10:06:43
Zkus zacit pouzivat framework, ktery XSS ochranu udela za tebe.
Treba Laravel, to je opajcovany Spring Boot a funguje pekne.

Pouzivat dneska hole PHP mi prijde krapet nerozum.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: exkalibr 10. 10. 2019, 11:47:41
stejne... vis kolik stran textu se vejde do 1MB? To je naprosto irelevantni tohle resit. To je jako kdybys setril misto v mysql tim, ze nepouzijes utf8mb4 ale misto toho tam budes sypat jen ascii.

Nedávno mi odpověděla jedna čtenářka mé stránky a dobře jsme si rozuměli. Za pár dnů (asi 3 dny jsme si vyměnili velmi mnoho vzkazů). Co jsem poslal já bylo na 9 stránek textu, ona 3. V utf8 41672 a 12554. Bylo to za tři dny a s několika zkrácenýma odkazama. Pokud by někdo tímhle tempem pokračoval měsíc zabere jeden soubor 416720 bajtů. 409kB. U webzdarma se píše že mají kapacitu 200-500mB jenže 200 a 500 je dost velký rozdíl. Kdybych psal např. seznamku kde si lidi mohou často psát, tak by ten prostor brzo došel, to je jasné. Ale zase na druhou stranu, jen teoreticky, jelikož bych dělal takovou věc zadarmo jako neplacenou službu a na neplacené stránce, tak bych to nějak omezit musel, jak délku textu tak celkové množství. Řešit to prostě vymazáváním zpráv jednou za čas. S tím se nic nedá dělat místo je omezené.

Ale mě jde o ten princip, že když se někdo rozhodne spamovat tak tam nacpe plno těch &&& a bude to zabírat mnoho textu, ale i samotným zpracováváním takových zpráv se ubírá rychlost, protože je delší a když chceš v textu něco vyhledat bude to trvat déle (například člověk může chtít aplikovat vyhledávání sprostých slov, jenže to nebude fungovat, když tam budou tyhle zástupné značky).
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: exkalibr 10. 10. 2019, 11:51:48
Zkus zacit pouzivat framework, ktery XSS ochranu udela za tebe.
Treba Laravel, to je opajcovany Spring Boot a funguje pekne.

Pouzivat dneska hole PHP mi prijde krapet nerozum.

Jestli si za to placený tak ho používej. Já jsem jen víkendový programátor, takže na učení se takových srandiček jako mysql a frameworky nemám čas. To už by mi nezbyl čas na nic. Prostě bych chtěl jen tu ochranu a tedy na s 98%-ní jistotou mohou říct, že to takhle udělám, že zakážu tyhle znaky. Plus jsem četl že taky uvozovky dokážou udělat spoustu neplechy. Ale uvozovky se daj jednoduše v utf8 nahradit za jiné znaky, který by v HTML/JS neměly mít ničivý účinek.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Ondra Satai Nekola 10. 10. 2019, 12:09:07
Zkus zacit pouzivat framework, ktery XSS ochranu udela za tebe.
Treba Laravel, to je opajcovany Spring Boot a funguje pekne.

Pouzivat dneska hole PHP mi prijde krapet nerozum.

Jestli si za to placený tak ho používej. Já jsem jen víkendový programátor, takže na učení se takových srandiček jako mysql a frameworky nemám čas. To už by mi nezbyl čas na nic. Prostě bych chtěl jen tu ochranu a tedy na s 98%-ní jistotou mohou říct, že to takhle udělám, že zakážu tyhle znaky. Plus jsem četl že taky uvozovky dokážou udělat spoustu neplechy. Ale uvozovky se daj jednoduše v utf8 nahradit za jiné znaky, který by v HTML/JS neměly mít ničivý účinek.

S tímhle přístupem si strašně naběhneš...
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: exkalibr 10. 10. 2019, 12:18:28
S tímhle přístupem si strašně naběhneš...

Nechci ztratit celý život programováním. Programování webových stránek je až příliš komplexní. V normální firmě, kde dostanou zakázku na naprogramování webu, je to něco jiného. Tam máš na to obvykle aspoň 3-4 lidi, designera, kodéra a programátora v php, plus případně experta na db. Jenže tihle lidi jsou od toho placení a dostávaj nadprůměrný mzdy za nadprůměrný výkony. Takže to co mohu nabídnout zdarma logicky nemůže být na stejný úrovni. Byl bych rád, kdyby to už konečně lidi co se věnují programování profesionálně, pochopili. Na své stránce třeba skoro vůbec neřeším design, protože na to nememám čas. Ten čas je vymezený a cíl je vymezený. Vždyť to takhle funguje i ve firmě - s omezenými prostředky uděláš omezenou věc.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Ondra Satai Nekola 10. 10. 2019, 12:41:19
S tímhle přístupem si strašně naběhneš...

Nechci ztratit celý život programováním. Programování webových stránek je až příliš komplexní. V normální firmě, kde dostanou zakázku na naprogramování webu, je to něco jiného. Tam máš na to obvykle aspoň 3-4 lidi, designera, kodéra a programátora v php, plus případně experta na db. Jenže tihle lidi jsou od toho placení a dostávaj nadprůměrný mzdy za nadprůměrný výkony. Takže to co mohu nabídnout zdarma logicky nemůže být na stejný úrovni. Byl bych rád, kdyby to už konečně lidi co se věnují programování profesionálně, pochopili. Na své stránce třeba skoro vůbec neřeším design, protože na to nememám čas. Ten čas je vymezený a cíl je vymezený. Vždyť to takhle funguje i ve firmě - s omezenými prostředky uděláš omezenou věc.

Což nic nemění na tom, že si naběhneš.  Prostě se pohybujeme v komplexní doméně, kde se potkává řada technologií a konceptů, a s tím se nedá nic dělat.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Gabriel Mlocik 10. 10. 2019, 12:49:17
1. používať retardovaný webhosting, proč? Proč ne normálne IaaS, PaaS? Zadarmo už bežne zoženieš zdielané VPS s vyhradeným 5GB úložiskom, 0.5GB RAM, a 200GB transferom pre jeden projekt / vlákno.
2. používať holé php, proč?
3. Riešiť escaping, když vätšina frameworkov už má Sanitizer v sebe? Proč to nepoužít?
4. Programovať v PHP webstránku? Proč? Však to neumí natívne ani plnohodnotný URL routing. Toto pritom zvláda JS, Golang, Python aj Rust či napr. Perl.
5. Riešiť miesto na disku? WTF? Je to úplne jedno, text sú bajty až kilobajty, miesta sú GB až TB. Aspoň pokiaľ sa nejedná o blbý free hosting.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Gabriel Mlocik 10. 10. 2019, 12:56:10
Navyše hodnoty v databázy ani netreba sanitizovať tak jak sa tu popisuje, stačí escapovať 3 znaky... Uvodzovky, apostrofy, a spätnú lomku. Ale bežne teraz framework už obstará kompletný sanitizing.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: oss 10. 10. 2019, 13:59:06
Navyše hodnoty v databázy ani netreba sanitizovať tak jak sa tu popisuje, stačí escapovať 3 znaky... Uvodzovky, apostrofy, a spätnú lomku. Ale bežne teraz framework už obstará kompletný sanitizing.
OMG len to nie, toto je amterizmus najhrubsieho zrna. Ano mozno to odradi nejake script kidis ale akonahle pouziju hotovy nastroj, tak ti vyberu celu databazu.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Gabriel Mlocik 10. 10. 2019, 14:22:26
Navyše hodnoty v databázy ani netreba sanitizovať tak jak sa tu popisuje, stačí escapovať 3 znaky... Uvodzovky, apostrofy, a spätnú lomku. Ale bežne teraz framework už obstará kompletný sanitizing.
OMG len to nie, toto je amterizmus najhrubsieho zrna. Ano mozno to odradi nejake script kidis ale akonahle pouziju hotovy nastroj, tak ti vyberu celu databazu.

No ani ne, záleží jak je riešený server-side a prepojenie s databázou. Snaď nikto nepristupuje k databázy napriamo volaním SQL príkazov z PHP, však nechať všetko string, tieto 3 veci v stringu oescapovať a hotovo. Či?
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: exkalibr 10. 10. 2019, 14:25:29
1. používať retardovaný webhosting, proč? Proč ne normálne IaaS, PaaS? Zadarmo už bežne zoženieš zdielané VPS s vyhradeným 5GB úložiskom, 0.5GB RAM, a 200GB transferom pre jeden projekt / vlákno.
2. používať holé php, proč?
3. Riešiť escaping, když vätšina frameworkov už má Sanitizer v sebe? Proč to nepoužít?
4. Programovať v PHP webstránku? Proč? Však to neumí natívne ani plnohodnotný URL routing. Toto pritom zvláda JS, Golang, Python aj Rust či napr. Perl.
5. Riešiť miesto na disku? WTF? Je to úplne jedno, text sú bajty až kilobajty, miesta sú GB až TB. Aspoň pokiaľ sa nejedná o blbý free hosting.

Pamatuju si že kdysi existovala služba moxo, ale dopadlo to tak, že majitel odkadsi z ruska změnil přístupová hesla a ukradl všem uživatelům hesla a uložená osobní data. Webnode naše česká tradice a jistota, ne nějaký zavšivený cizinec z Ruska.

Já bych vám zase mohl položit podobné otázky, ale zredukuju to.

1. Proč bych měl používat cizí služby od lidí nebo firem, které neznám.
2. Proč bych se měl učit jiný jazyk, službu nebo cokoliv jiného cizího, když už tak phpéčkem jsem strávil roky a netvrdím, že to umím, protože za tu dobu se to zas posunulo jinam.
3. Asi máte problém chápat psané slovo. Psal jsem, že použiju freehosting, nechci platit za provoz služby, která je zadarmo. Jestli jste tak bohatý, že si to můžete dovolit, tak se hlásím o sponzoring.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Gabriel Mlocik 10. 10. 2019, 14:30:11
Pamatuju si že kdysi existovala služba moxo, ale dopadlo to tak, že majitel odkadsi z ruska změnil přístupová hesla a ukradl všem uživatelům hesla a uložená osobní data. Webnode naše česká tradice a jistota, ne nějaký zavšivený cizinec z Ruska.

Já bych vám zase mohl položit podobné otázky, ale zredukuju to.

1. Proč bych měl používat cizí služby od lidí nebo firem, které neznám.
2. Proč bych se měl učit jiný jazyk, službu nebo cokoliv jiného cizího, když už tak phpéčkem jsem strávil roky a netvrdím, že to umím, protože za tu dobu se to zas posunulo jinam.
3. Asi máte problém chápat psané slovo. Psal jsem, že použiju freehosting, nechci platit za provoz služby, která je zadarmo. Jestli jste tak bohatý, že si to můžete dovolit, tak se hlásím o sponzoring.
[/quote]

1. Digital Ocean, GKE či GAE (Od Googlu), či Heroku (Od Salesforce) sa ti zdá že neznáš... ale no tak, Google zná aj moja 95 ročná babička.
3. Asi vy taky, jak som nedoporučoval niečo platené. Dokonca priamo cituješ: "Zadarmo už bežne zoženieš zdielané VPS s vyhradeným 5GB úložiskom, 0.5GB RAM, a 200GB transferom pre jeden projekt / vlákno."
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: exkalibr 10. 10. 2019, 14:30:30
Navyše hodnoty v databázy ani netreba sanitizovať tak jak sa tu popisuje, stačí escapovať 3 znaky... Uvodzovky, apostrofy, a spätnú lomku. Ale bežne teraz framework už obstará kompletný sanitizing.

To jste mě pobavil. A co když vám tu spätnú lomku vyescapuju?
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Gabriel Mlocik 10. 10. 2019, 14:31:58
Navyše hodnoty v databázy ani netreba sanitizovať tak jak sa tu popisuje, stačí escapovať 3 znaky... Uvodzovky, apostrofy, a spätnú lomku. Ale bežne teraz framework už obstará kompletný sanitizing.

To jste mě pobavil. A co když vám tu spätnú lomku vyescapuju?

veď když už escapuješ, tak sa string zostane stringom, ak pridáš ďalšiu lomku budú tam 2 escapnuté lomky, teda \\\\ a to je v poriadku, lebo v reťazci sa to chová ako obyčajné 2 lomky bez funkcie. Ak dáš jednu lomku, tak sa escapne na \\, to je taky v poriadku, v retazci je to jedna lomka bez funkcie.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Kit 10. 10. 2019, 15:37:49
Navyše hodnoty v databázy ani netreba sanitizovať tak jak sa tu popisuje, stačí escapovať 3 znaky... Uvodzovky, apostrofy, a spätnú lomku. Ale bežne teraz framework už obstará kompletný sanitizing.

K čemu má být escapování dobré? Vždyť to každá databáze má jinak. Smysl mají jedině prepared statements. Můžeš použít i metodu quote(), ale to je jen taková nesystémová  nouzovka.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: stefan.samecek 10. 10. 2019, 16:05:01
Tomu bych se chtěl vyhnout. Co se stane, když uživatel začne odesílat hromadu značek jako: &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& nedojde zachvíli k tomu, že budu mít tolik množství textu, které budu muset analyzovat? To bude zpomalovat běh serveru a zbytečně zabírat místo na disku. Jenom ta sekvence nahoře zabrala 455 znaků. Došlo k pětinásobnému prodloužení textu. Proto bych ty znaky buďto rád odstranil, aby je nebylo možné použít nebo zastavil uživatele, že použil nepovolené znaky. Nechci ukádat věci, které nepoužívám.
No tak potom prostě před uložením zkontrolujete vstupní data a pokud v nich najdete něco ze skupiny [&<>] tak to uživateli vrátíte s chybovou hláškou o nepovolených znacích. Nebo ty znaky prostě z dat vyhoďte když vám zabírají místo.
V čem je vlastně problém ?

Stefan
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Gabriel Mlocik 10. 10. 2019, 16:27:02
K čemu má být escapování dobré? Vždyť to každá databáze má jinak. Smysl mají jedině prepared statements. Můžeš použít i metodu quote(), ale to je jen taková nesystémová  nouzovka.

no ja neviem, ja to nikdy neriešil, na holom nerobil... framework mi sanitizing vyriešil priamo.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: exkalibr 10. 10. 2019, 17:25:42
3. Asi vy taky, jak som nedoporučoval niečo platené. Dokonca priamo cituješ: "Zadarmo už bežne zoženieš zdielané VPS s vyhradeným 5GB úložiskom, 0.5GB RAM, a 200GB transferom pre jeden projekt / vlákno."

Ale já jsem to vyvrátil, jako nedůvěryhodný argument. V tomto světě není nic zadarmo, nikdo ti nedá nic 5GB zadarmo? A náhodou někde v kapse u sebe nemáš 1T bytový disk zadarmo? Jeden by se mi hodil. Nebo víc T když je všechno tak zadarmo.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: exkalibr 10. 10. 2019, 17:44:07
Navyše hodnoty v databázy ani netreba sanitizovať tak jak sa tu popisuje, stačí escapovať 3 znaky... Uvodzovky, apostrofy, a spätnú lomku. Ale bežne teraz framework už obstará kompletný sanitizing.

To jste mě pobavil. A co když vám tu spätnú lomku vyescapuju?

veď když už escapuješ, tak sa string zostane stringom, ak pridáš ďalšiu lomku budú tam 2 escapnuté lomky, teda \\\\ a to je v poriadku, lebo v reťazci sa to chová ako obyčajné 2 lomky bez funkcie. Ak dáš jednu lomku, tak sa escapne na \\, to je taky v poriadku, v retazci je to jedna lomka bez funkcie.

To escapování se dá obejít - za určitých okolností. Ale je fakt, že podrobnosti si nepamatuju. Na toto téma je třeba prohledat internet:

https://security.stackexchange.com/questions/134208/how-to-bypass-backslash-escaping-xss

Zde se např. píše:
Citace
Whether they are completely ignored or improperly escaped, they seem to be a frequent cause of reflected XSS. Because I come across this issue so often,
https://www.securitysift.com/quotes-and-xss-planning-your-escape/

Na mě je ale tahle problematika příliš rozsáhlá abych to četl.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: exkalibr 10. 10. 2019, 17:46:31
Tomu bych se chtěl vyhnout. Co se stane, když uživatel začne odesílat hromadu značek jako: &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& nedojde zachvíli k tomu, že budu mít tolik množství textu, které budu muset analyzovat? To bude zpomalovat běh serveru a zbytečně zabírat místo na disku. Jenom ta sekvence nahoře zabrala 455 znaků. Došlo k pětinásobnému prodloužení textu. Proto bych ty znaky buďto rád odstranil, aby je nebylo možné použít nebo zastavil uživatele, že použil nepovolené znaky. Nechci ukádat věci, které nepoužívám.
No tak potom prostě před uložením zkontrolujete vstupní data a pokud v nich najdete něco ze skupiny [&<>] tak to uživateli vrátíte s chybovou hláškou o nepovolených znacích. Nebo ty znaky prostě z dat vyhoďte když vám zabírají místo.
V čem je vlastně problém ?

Stefan

Ale vlastně vůbec v ničem. Přesně toto jsem přece psal v otázce, že to tak udělám a zda to tak stačí. Jen jsem chtěl slyšet jestli to stačí nebo ne.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Gabriel Mlocik 10. 10. 2019, 17:50:58
3. Asi vy taky, jak som nedoporučoval niečo platené. Dokonca priamo cituješ: "Zadarmo už bežne zoženieš zdielané VPS s vyhradeným 5GB úložiskom, 0.5GB RAM, a 200GB transferom pre jeden projekt / vlákno."

Ale já jsem to vyvrátil, jako nedůvěryhodný argument. V tomto světě není nic zadarmo, nikdo ti nedá nic 5GB zadarmo? A náhodou někde v kapse u sebe nemáš 1T bytový disk zadarmo? Jeden by se mi hodil. Nebo víc T když je všechno tak zadarmo.

Nič neni zadarmo? tak čo Linux, a čo napríklad Gimp? ach jaj, či niečo platíš za ich používanie?
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Kit 10. 10. 2019, 19:08:01
K čemu má být escapování dobré? Vždyť to každá databáze má jinak. Smysl mají jedině prepared statements. Můžeš použít i metodu quote(), ale to je jen taková nesystémová  nouzovka.
no ja neviem, ja to nikdy neriešil, na holom nerobil... framework mi sanitizing vyriešil priamo.

Framework s tím nedělá vůbec nic, jen to předá dál.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Kit 10. 10. 2019, 19:11:35
To escapování se dá obejít - za určitých okolností. Ale je fakt, že podrobnosti si nepamatuju. Na toto téma je třeba prohledat internet:

https://security.stackexchange.com/questions/134208/how-to-bypass-backslash-escaping-xss

Proto se escapování nedělá a nechává se to na databázovém ovladači, který to udělá nejlépe.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Kit 10. 10. 2019, 19:15:32
No tak potom prostě před uložením zkontrolujete vstupní data a pokud v nich najdete něco ze skupiny [&<>] tak to uživateli vrátíte s chybovou hláškou o nepovolených znacích. Nebo ty znaky prostě z dat vyhoďte když vám zabírají místo.
V čem je vlastně problém ?

Stefan
Ale vlastně vůbec v ničem. Přesně toto jsem přece psal v otázce, že to tak udělám a zda to tak stačí. Jen jsem chtěl slyšet jestli to stačí nebo ne.

To je právě chybně. Co když uživatel potřebuje uložit znaky <&> a ty mu je z nějakých pochybných důvodů smažeš? Hezky mu je tam nechej.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Ovrscout 10. 10. 2019, 19:29:25
Nejsem zrovna expert ale jen pár znaků nemusí stačit, podle toho kde se text používá jich může být víc.
Pěkně popsaná nějaká ta pravidla prevence XSS např. zde:
https://cheatsheetseries.owasp.org/cheatsheets/Cross_Site_Scripting_Prevention_Cheat_Sheet.html

Navíc jenom eskepování/ořezávání nemusí stačit. Je vhodné nebo dokonce nutné data obalit například pokud se uživatelská data použijí třeba jako hodnota atributu je třeba tam okolo vrazit uvozovky (také je popsáno v odkazu výše).
Obzvláště pokud to píšeš ručně, tak je třeba si dát pozor.

S tím souvisí i ukládání a načítání dat do souborů/databází - platí podobná pravidla - záleží zda se data nějak parsují (jak při ukládání tak při čtení, nebo případně includování, někdy si člověk ani neuvědomí co všechno fuguje jako parser).
Jen je třeba nezapomenout že to je často druhý, samstatný problém. To že se data správně uloží/načtou neznamená že se mohou vložit kamkoliv do html, escapovací pravidla bývají jiná.
Z toho také plyne že i když se vyhneme eskejpování/čištění při ukládání do databáze pomocí bindingu - viz prepared statementy co zmiňuje Kit, tak to ještě nechrání před XSS!

Jinak řečeno, je třeba eskejpovat/ořezávat a obalovat(např ty uvozovky) podle toho kde/jak jsou data použita.
Takže je potřeba ošetřit data jak při vstupu od uživatele(aby "nehaknul" stránky/databázi/server), tak na i výstupu směrem k uživateli (což je ta prevence XSS)

P.S. Speciálně pokud ukládáš do souboru tak není dobrý nápad nechat uživatele ovlivňovat název souboru na serveru, bezpečnější je si název vygenerovat a uživatelský název mít uložen bokem.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: exkalibr 11. 10. 2019, 15:32:58
S tím souvisí i ukládání a načítání dat do souborů/databází - platí podobná pravidla - záleží zda se data nějak parsují (jak při ukládání tak při čtení, nebo případně includování, někdy si člověk ani neuvědomí co všechno fuguje jako parser).

Parsery si vždycky píšu vlastní, rychlejší než ty co jsou defaultně zabudované v php. Jako oddělovač nejčastěji používám \n, \t ale uvažuju i o použití speciálních znaků tam kde user nevkládá vstupy. Napsal jsem si například funkci, která převádí číslo na zakódovaný string (něco jako intval, ale má ord. rozsah 32-254). Výhodou je to, že i velké id se zkrátí na 4-5 bajtů. Jak ale čísla oddělit? Tak mě napadlo buď 255 (protože 255 pro id nikdy nepoužívám) nebo \r.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: stefan.samecek 11. 10. 2019, 15:46:44
Parsery si vždycky píšu vlastní, rychlejší než ty co jsou defaultně zabudované v php. Jako oddělovač nejčastěji používám \n, \t ale uvažuju i o použití speciálních znaků tam kde user nevkládá vstupy. Napsal jsem si například funkci, která převádí číslo na zakódovaný string (něco jako intval, ale má ord. rozsah 32-254). Výhodou je to, že i velké id se zkrátí na 4-5 bajtů. Jak ale čísla oddělit? Tak mě napadlo buď 255 (protože 255 pro id nikdy nepoužívám) nebo \r.

Přesně tohle je vlákno příspěvků které sráží věrohodnost tohoto serveru pro mě až na dno :O(
Uživatel zaregistrován těsně před založením vlákna, nikam jinam nepřispívá a vede to přesně tak aby vyvolával kontroverze a provokoval. Bohužel je to tu opravdu časté i přes povinnou registraci :O(
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: exkalibr 11. 10. 2019, 17:45:57
Parsery si vždycky píšu vlastní, rychlejší než ty co jsou defaultně zabudované v php. Jako oddělovač nejčastěji používám \n, \t ale uvažuju i o použití speciálních znaků tam kde user nevkládá vstupy. Napsal jsem si například funkci, která převádí číslo na zakódovaný string (něco jako intval, ale má ord. rozsah 32-254). Výhodou je to, že i velké id se zkrátí na 4-5 bajtů. Jak ale čísla oddělit? Tak mě napadlo buď 255 (protože 255 pro id nikdy nepoužívám) nebo \r.

Přesně tohle je vlákno příspěvků které sráží věrohodnost tohoto serveru pro mě až na dno :O(
Uživatel zaregistrován těsně před založením vlákna, nikam jinam nepřispívá a vede to přesně tak aby vyvolával kontroverze a provokoval. Bohužel je to tu opravdu časté i přes povinnou registraci :O(

Copak tě trápí, svěř se nám.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Gabriel Mlocik 11. 10. 2019, 18:15:51
Framework s tím nedělá vůbec nic, jen to předá dál.

Kecáš nezmysel, a ešte jak to môžeš takto všeobecne povedať, frameworkov je miliarda. Nezáleží náhodou ktorý použiješ?
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Kit 11. 10. 2019, 22:11:10
Framework s tím nedělá vůbec nic, jen to předá dál.
Kecáš nezmysel, a ešte jak to môžeš takto všeobecne povedať, frameworkov je miliarda. Nezáleží náhodou ktorý použiješ?

Kvalitní framework to skutečně jen předá dál do databáze přes prepared statements. Nic víc s tím totiž není třeba dělat. Databázové ovladače není radno obcházet.

Při prezentaci je zase nutné předat data do HTML, proto se obvykle používá funkce htmlspecialchars(). Z mého pohledu je poněkud zastaralá - PHP nabízí lepší, objektové řešení, u kterého už nemusím přemýšlet nad typem eskejpování v daném kontextu.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Gabriel Mlocik 11. 10. 2019, 22:57:46
mikto nehovorí o obchádzaní driverov, ale než sa zavolá funkce driveru, tak proč by framework nepripravil data do bezpečnej podoby? Teda zabránil SQL injection a pod? Podla mňa je mnoho kvalitných frameworkov ktoré robia aj toto, a považujem ich za kvalitné a správne riešené.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Ovrscout 12. 10. 2019, 01:10:37
Při prezentaci je zase nutné předat data do HTML, proto se obvykle používá funkce htmlspecialchars(). Z mého pohledu je poněkud zastaralá - PHP nabízí lepší, objektové řešení, u kterého už nemusím přemýšlet nad typem eskejpování v daném kontextu.

Myslíš jako pomocí DOMDocument? nebo něco jiného?
Ideálně prosím dej nějaký příklad kde se to používá.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Kit 12. 10. 2019, 11:11:40
mikto nehovorí o obchádzaní driverov, ale než sa zavolá funkce driveru, tak proč by framework nepripravil data do bezpečnej podoby? Teda zabránil SQL injection a pod? Podla mňa je mnoho kvalitných frameworkov ktoré robia aj toto, a považujem ich za kvalitné a správne riešené.

Protože tohle už ten DB driver dělá, sám se efektivně brání proti SQL injection.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Kit 12. 10. 2019, 11:19:32
Při prezentaci je zase nutné předat data do HTML, proto se obvykle používá funkce htmlspecialchars(). Z mého pohledu je poněkud zastaralá - PHP nabízí lepší, objektové řešení, u kterého už nemusím přemýšlet nad typem eskejpování v daném kontextu.
Myslíš jako pomocí DOMDocument? nebo něco jiného?
Ideálně prosím dej nějaký příklad kde se to používá.

Ano, mám na mysli DOMDocument. Vyleze z toho hotové XML či HTML, kde jsou potenciálně nebezpečné znaky řádně transformovány do entit.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Ovrscout 12. 10. 2019, 14:00:18
Při prezentaci je zase nutné předat data do HTML, proto se obvykle používá funkce htmlspecialchars(). Z mého pohledu je poněkud zastaralá - PHP nabízí lepší, objektové řešení, u kterého už nemusím přemýšlet nad typem eskejpování v daném kontextu.
Myslíš jako pomocí DOMDocument? nebo něco jiného?
Ideálně prosím dej nějaký příklad kde se to používá.

Ano, mám na mysli DOMDocument. Vyleze z toho hotové XML či HTML, kde jsou potenciálně nebezpečné znaky řádně transformovány do entit.
DOMDocument je možná bezpečnější, ale to "lepší" se mi moc nezdá (spotřeba paměi,výkon,nutnost kompletního DOMu před odesláním na clienta).
Navíc transformace DOMu se dost liší od běžného použití php jako preprocesoru. To už mi přijde "lepší" použít nějaký framework, než toto.Ale to už jsme mimo téma.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Kit 12. 10. 2019, 14:56:11
Při prezentaci je zase nutné předat data do HTML, proto se obvykle používá funkce htmlspecialchars(). Z mého pohledu je poněkud zastaralá - PHP nabízí lepší, objektové řešení, u kterého už nemusím přemýšlet nad typem eskejpování v daném kontextu.
Myslíš jako pomocí DOMDocument? nebo něco jiného?
Ideálně prosím dej nějaký příklad kde se to používá.
Ano, mám na mysli DOMDocument. Vyleze z toho hotové XML či HTML, kde jsou potenciálně nebezpečné znaky řádně transformovány do entit.
DOMDocument je možná bezpečnější, ale to "lepší" se mi moc nezdá (spotřeba paměi,výkon,nutnost kompletního DOMu před odesláním na clienta).
Navíc transformace DOMu se dost liší od běžného použití php jako preprocesoru. To už mi přijde "lepší" použít nějaký framework, než toto.Ale to už jsme mimo téma.

Příznivci funkcionálního programování zde mají příležitost, jak se vyřádit. Nutnost kompletního DOMu nevidím jako překážku, jen málo úloh při tom vyžaduje víc než 1 MB. Obvykle to jsou jen desítky až stovky KB, se kterými si hravě poradí v malých jednotkách ms. Odezva je tedy řádově rychlejší než u běžných frameworků. Pokud bys ten DOM nechtěl generovat naráz, tak nemusíš. Uděláš jednu větev, exportuješ, uděláš další, exportuješ,... Efektivnější je však vygenerovat vše naráz, nemusíš tak plýtvat drahým echem. Po odladění jen vypneš odsazování. Navíc se v XML, které dostaneš navíc jako bonus, hledají chyby mnohem snáze než v HTML.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Ovrscout 12. 10. 2019, 17:44:07
Při prezentaci je zase nutné předat data do HTML, proto se obvykle používá funkce htmlspecialchars(). Z mého pohledu je poněkud zastaralá - PHP nabízí lepší, objektové řešení, u kterého už nemusím přemýšlet nad typem eskejpování v daném kontextu.
Myslíš jako pomocí DOMDocument? nebo něco jiného?
Ideálně prosím dej nějaký příklad kde se to používá.
Ano, mám na mysli DOMDocument. Vyleze z toho hotové XML či HTML, kde jsou potenciálně nebezpečné znaky řádně transformovány do entit.
DOMDocument je možná bezpečnější, ale to "lepší" se mi moc nezdá (spotřeba paměi,výkon,nutnost kompletního DOMu před odesláním na clienta).
Navíc transformace DOMu se dost liší od běžného použití php jako preprocesoru. To už mi přijde "lepší" použít nějaký framework, než toto.Ale to už jsme mimo téma.

Příznivci funkcionálního programování zde mají příležitost, jak se vyřádit. Nutnost kompletního DOMu nevidím jako překážku, jen málo úloh při tom vyžaduje víc než 1 MB. Obvykle to jsou jen desítky až stovky KB, se kterými si hravě poradí v malých jednotkách ms. Odezva je tedy řádově rychlejší než u běžných frameworků. Pokud bys ten DOM nechtěl generovat naráz, tak nemusíš. Uděláš jednu větev, exportuješ, uděláš další, exportuješ,... Efektivnější je však vygenerovat vše naráz, nemusíš tak plýtvat drahým echem. Po odladění jen vypneš odsazování. Navíc se v XML, které dostaneš navíc jako bonus, hledají chyby mnohem snáze než v HTML.
Mno, asi máš pravdu, ale pořád se nemůžu zbavit dojmu že u projektů kde bych uvažoval takhle přímo psát v php je to kanón na vrabce, a jde to proti "duchu" php, jak ho chápu já, cožje víceméně preprocesor pro html s možností doplnit o nějaký ten kód, čtení z db atp.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Kit 12. 10. 2019, 18:24:55
DOMDocument je možná bezpečnější, ale to "lepší" se mi moc nezdá (spotřeba paměi,výkon,nutnost kompletního DOMu před odesláním na clienta).
Navíc transformace DOMu se dost liší od běžného použití php jako preprocesoru. To už mi přijde "lepší" použít nějaký framework, než toto.Ale to už jsme mimo téma.

Příznivci funkcionálního programování zde mají příležitost, jak se vyřádit. Nutnost kompletního DOMu nevidím jako překážku, jen málo úloh při tom vyžaduje víc než 1 MB. Obvykle to jsou jen desítky až stovky KB, se kterými si hravě poradí v malých jednotkách ms. Odezva je tedy řádově rychlejší než u běžných frameworků. Pokud bys ten DOM nechtěl generovat naráz, tak nemusíš. Uděláš jednu větev, exportuješ, uděláš další, exportuješ,... Efektivnější je však vygenerovat vše naráz, nemusíš tak plýtvat drahým echem. Po odladění jen vypneš odsazování. Navíc se v XML, které dostaneš navíc jako bonus, hledají chyby mnohem snáze než v HTML.
Mno, asi máš pravdu, ale pořád se nemůžu zbavit dojmu že u projektů kde bych uvažoval takhle přímo psát v php je to kanón na vrabce, a jde to proti "duchu" php, jak ho chápu já, cožje víceméně preprocesor pro html s možností doplnit o nějaký ten kód, čtení z db atp.

Naopak se mi jeví generování XML a HTML přes DOM velmi snadné a elegantní. V žádném případě se nejedná o kanón na vrabce. Dokonce můžeš importovat statické HTML, změnit libovolné nody a poslat na výstup v podstatě stejně jako v Javascriptu. Všechny šablonovací systémy se proti takové jednoduchosti použití mohou zahrabat. Kodérovi stačí, pokud umí HTML a Javascript.

V PHP si zpracuji vstup, načtu či modifikuji data v databázi, načtu šablonu, vložím do ní data, vyplivnu na výstup a hotovo. Vše má PHP v základní výbavě, frameworky nejsou potřebné. Je dobré, pokud použiješ architekturu MVC a budeš se držet zásad SOLID, které bývají ve frameworcích tak často porušovány.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Ovrscout 12. 10. 2019, 21:27:34
Naopak se mi jeví generování XML a HTML přes DOM velmi snadné a elegantní. V žádném případě se nejedná o kanón na vrabce. Dokonce můžeš importovat statické HTML, změnit libovolné nody a poslat na výstup v podstatě stejně jako v Javascriptu. Všechny šablonovací systémy se proti takové jednoduchosti použití mohou zahrabat. Kodérovi stačí, pokud umí HTML a Javascript.

V PHP si zpracuji vstup, načtu či modifikuji data v databázi, načtu šablonu, vložím do ní data, vyplivnu na výstup a hotovo. Vše má PHP v základní výbavě, frameworky nejsou potřebné. Je dobré, pokud použiješ architekturu MVC a budeš se držet zásad SOLID, které bývají ve frameworcích tak často porušovány.

Dovolil jsem si hodně zjednodušený příklad:

Varianta 1:
Kód: [Vybrat]
<?php
 $TextForInsert
='<script>alert(123)</script>';
?>

<html>
    <head>
        <title>PHP Test</title>
        </head>
    <body>
        <div id="TestID">
            <?php echo htmlspecialchars($TextForInsert); ?>
        </div>
    </body>
</html>

Varianta 2:
Kód: [Vybrat]
<?php
$TextForInsert='<script>alert(123)</script>';
?>


<?php
$HtmlTemplate 
= <<<'EOD'
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<div id="TestID">
</div>
</body>
</html>
EOD;
 
$dom = new DOMDocument();
 
$dom->loadHTML ($HtmlTemplate);
 
$dom->getElementById('TestID')->appendChild($dom->createTextNode($TextForInsert));
 echo 
$dom->saveHTML();
?>


V první variantě
 - je třeba zvolit správnou funkci podle toho kam se text vkládá

V druhé variantě
 - Je třeba získat správnou část DOMu
 - Je potřeba vytvořit nový element a vložit do DOm (funkce opět závislá na tom co a kam vkládám)

Pokud máš nějaký větší, složitější systém s více stránkami, sdíleným kódem, dynamickými templaty atp. , tak se druhá varianta asi vyplatí.
Ale pro pár jednoduchých stránek mi to přijde zbytčné. A za snadné a elegantní (oproti první variantě) bych to také trovna neoznačil.
Název: Re:Jak se chránit pro XSS útoku na php serveru?
Přispěvatel: Kit 12. 10. 2019, 22:07:49
Variantu 1 jsem používal v éře PHP3, ale dnes bych ji už nepoužil, protože PHP a HTML nemíchám.

Variantu 2 nemá význam používat s Nowdoc, to bych raději tu šablonu načetl z disku. Opět z důvodu, aby se PHP nemíchalo s HTML.

I po této úpravě to stále vypadá složitější než ta první. Co jiného čekat v primitivním příkladu?

Pokud to však bude běžný web či ERP, bude mít druhé řešení navrch. Proč? Kodér například vytvoří novou šablonu, kde menu nebude nahoře, ale vlevo nebo dole. Pokud zachová ID, tak programátor nemusí změnit ani písmenko. U první varianty to však celé bude muset překopat.

Na drobnosti se však první varianta hodit může.