NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Čistění od html, xss, apod

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Patrik Smělý
Tvůrce
Avatar
Patrik Smělý:8.8.2015 1:40

Dobrý den,

Už nějakou dobu přemýšlím jak by mělo vypadat správné čistění od html, xss apod. Hodně lidí jsem viděl čistit inputy a jakékoliv vstupy od uživatele, to jsem taky doteď dělat například jsem viděl toto:

if(!get_magic_quotes_gpc()) {
    $text = stripslashes($Text);
    $text = strip_tags($Text);
    $text = htmlspecialchars($Text);
    $text = trim($Text);
}

Tak nějak jsem to dříve dělal i já, ale hodně jsem viděl i slyšel že čistit vstupy tímto způsobem není správné a ba i čistění vstupů je špatné a má se to čistit při výstupu, proto se ptám jak účinně čistit data při výstupu, proti všem možným variantám útoku. PS: jako DB ovladač používám PDO, a nikdy do dotazu netahám proměnné(používám metodu prepare). Vždy když jsem čistil vstupy vždy to fungovalo ale vzhledem k tomu že funkce get_magic_quo­tes_gpc() je už zastaralá a brzo v php už nebude, tak jsem se dokopal k tomu že to udělám při výstupu, ale zde je otázka dělám vše jak se má.

Předem děkuji SogoCZE :).

 
Odpovědět
8.8.2015 1:40
Avatar
Odpovídá na Patrik Smělý
Martin Konečný (pavelco1998):8.8.2015 2:00

Zdar,

Na XSS neexistuje nějaká univerzální funkce, ale musíš ošetřovat podle kontextu, tzn. zda proměnnou vypisuješ někde v HTML, jako atribut, CSS, v JS apod. Já to taky nedokážu správně ošetřit všude, proto používám Nette, které to udělá za mě pomocí context aware escaping :)
Proti SQL inject má PDO parametrizované dotazy, kde bezpečnost vůči SQL inject pořeší samo .

Nahoru Odpovědět
8.8.2015 2:00
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Patrik Smělý:8.8.2015 2:21

Hm, to je celkem škoda že neexistuje žádná metoda jak toto řešit jednoduše :(, nette používat nechci, proto to budu muset nějak účinně řešit, ale i přesto děkuji :).

 
Nahoru Odpovědět
8.8.2015 2:21
Avatar
Odpovídá na Patrik Smělý
Martin Konečný (pavelco1998):8.8.2015 3:31

Tak čistě teoreticky Nette používat nemusíš, jen obšlehnout ten algoritmus :D ale prakticky bych stejně asi doporučil použít něco hotového a funkčního. Teda pokud děláš něco, kde to tu bezpečnost fakt vyžaduje.

Nahoru Odpovědět
8.8.2015 3:31
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Patrik Smělý:8.8.2015 3:35

No vzhledem k tomu že na bezpečnost vždy dbám tak ano je to potřeba :D. A s tím algoritmem je to celkem vykrádání :P :D.

 
Nahoru Odpovědět
8.8.2015 3:35
Avatar
Odpovídá na Patrik Smělý
Martin Konečný (pavelco1998):8.8.2015 3:39

Mohl bys ale využít jen šablonovací systém Latte, který to escapování má v sobě :)

Nahoru Odpovědět
8.8.2015 3:39
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Patrik Smělý:8.8.2015 4:31

Hm to zní docela zajímavě, pokud by mi to nějak extra nezasahovalo do systému tak proč ne :).

 
Nahoru Odpovědět
8.8.2015 4:31
Avatar
Martin Konečný (pavelco1998):8.8.2015 5:03

Latte by mělo jít stáhnout bez závislosti na ostatních částí frameworku. Sice jsem to zvlášť nezkoušel, ale myslim, že i její "instalace" bude jednoduchá :)

Nahoru Odpovědět
8.8.2015 5:03
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Patrik Smělý:8.8.2015 5:14

No i když se na tom tak zamyslím, mě jde o to si udělat nějakou třídu kde budu mít metody typu, CistiCss, CistiHtml, CistiHtmlAtributy, CistiJs, CistiUrl a tak dále avšak nevím jak to bezpečně čistit. Neposlal by jsi mi nějaký článek, nebo dokonce nenapsal bys mi nějaké příklady ? Např na html sice vím že existuje funkce

htmlspecialchars

Ale nevím jestli je to vše co musím udělat když chci vypisovat data z databáze které zadá uživatel. Předem děkuji :). Při nejhorším bych asi použil latte, ale přijde mi zbytečné používat template engine když na jediné na co to využiji je čistění. :)

 
Nahoru Odpovědět
8.8.2015 5:14
Avatar
Odpovídá na Patrik Smělý
Martin Konečný (pavelco1998):8.8.2015 5:17

Článek vysvětlující všechny varianty jsem snad neviděl, ale zkus podívat na přednášku od pana Grudla, cca od 25:50

https://www.youtube.com/watch?…

ukazuje tam, jak se to řeší v HTML, atributu a v JS.
Ale víc ti asi bohužel neporadim

Editováno 8.8.2015 5:18
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
8.8.2015 5:17
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Patrik Smělý:8.8.2015 22:52

Ahoj,

Tak jsem se nějak podíval do zdrojového kódu latte, vzal si pár věcí a odešel, vše co jsem chtěl tam bylo :). Samosebou jsem do té třídy napsal že nějaké věci jsou vzaté z latte, no doufám že to nebude ničemu vadit :D. Ale i tak děkuji za doporučení :).

 
Nahoru Odpovědět
8.8.2015 22:52
Avatar
Odpovídá na Patrik Smělý
Martin Konečný (pavelco1998):8.8.2015 23:02

Když tak jsem ti to neporadil já :p :D

Nahoru Odpovědět
8.8.2015 23:02
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Patrik Smělý
Tvůrce
Avatar
Odpovídá na Martin Konečný (pavelco1998)
Patrik Smělý:9.8.2015 0:11

:O no když jsem uvedl autora, i odkaz na nette/latte tak snad není problém ne ? :)

 
Nahoru Odpovědět
9.8.2015 0:11
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 13 zpráv z 13.