Utahujete si z toho, že někdo napsal šablonovací systém v PHP. Podívejte se na svůj kód, nikde žádné escapování výstupu, prostě to jen vysypete do šablony. To je fakt špatný nápad, špatný jakože fakt hodně.
Mrkněte třeba sem:
https://latte.nette.org/cs/safety-first
Noo, to ze sa sablonovaci system pise v hypertext preprocesori, nie je chyba tak v PHP ako chyba vyvojara ktori pristupuje k PHP ako k C++ (hoci toho maju syntakticky dost spolocneho, logicky su dost odlisne). Proste PHP svet je plny lopat, ktore v C++ radsej nikto patlat nenecha, v PHP su seniori...
Rozumím, takže uživatel se může rozloučit s uvozovkami, apostrofy a dalšími speciálními znaky.
Ne, escapovat se má až výpis. Jiné escapování potřebujete pro vypsání do javascriptu, jiné do HTML, při uložení do soubor nic neescapujete a pod.
Podle toho, co píšete, jste PHP viděl naposledy někdy ve verzi 4.X, že? V C++ lze napsat prasárny, až zrak přechází. Ale to vlastně víte, prostě jste si musel do PHP kopnout za každou cenu, co? Děláte v C++, kdo je víc?
Lenze prekodovanie znakov do html reprezentacie znaku nie je escapovanie, je to formatovanie. A z bezpecnostou suvisi len okrajovo. S bezpecnostou suvisi priamo ostripovanie vstupu na potencionalne nebezpecne useky (napr script tagy). To ze si pletiete terminy je vas problem.
V 8.2 mam niekolko zivych projektov. C++ nemam vobec rad, radsej ADA ked to ma byt skopilovane, sem tam pouzijem C ak to nejde napisat v plsql. Interpreter najlepsie python. Proste volim jazyk podla potrieb projektu. Do PHP si nekopem, ako HTML preprocesor je skvele. Irituju ma lopaty co to PHP prznia a este si na to vymyslaju standarty. To je len vasa mylna domienka (ak takto uvazujete v praci, tak spolupraca s vami musi byt idylka)...
Escapování je přepis znaků nebo sekvencí se speciálním významem tak, aby speciální význam ztratily a zachovaly si původní vizuální význam. A je to *součástí* formátování.
Důvody, proč escapování probíhá až u formátování jsou dva:
1. Vstup může být zcela validní, i když obsahuje z hlediska výstupu speciální znaky. Třeba výukový příklad pro javascript, který se má zobrazit na stránkách vyučujícího.
2. Stejný vstup může jít do různých výstupů - HTML, Postscript, CSV, RichText, Regexp atd. Každý z nich má zcela jiné speciální sekvence a to, co bylo validováno (a stripováno) pro jeden, může mít zcela jiný význam pro druhý.
Escapovanie je prefixovanie specialnych znakov unikovym(escape) znakom. Pouziva sa napr. backslash.
Prevod specialnych znakov na entity a elementy v kontexte HTML je konverzia.
Ak potrebujete vystup zdrojaku, tak ho uzavriete do elementu code, tym sa zachova aj formatovanie.
Dovod preco sa pouziva prevod na elementy a entity je valiny HTML kod, plus davne obmedzenie. HTTP 1.0 protokol mal default charset ASCII, tj. 7 bit.
Ale aby sme si to ujasnili tak dame maly priklad (stary kod, ale posluzi):
$value = pg_escape_string($conn, $input);
$sql = "INSERT INTO a(b) VALUES ("{$value}");
V tomto pripade ide o escapovanie ako prevencia pred SQL injection.
Stale mate ten mylny dojem, ze escapovat sa ma na vystupe a nie na vstupe?
Ne, to rozhodně není mylný dojem.
https://benhoyt.com/writings/dont-sanitize-do-escape/
https://lukeplant.me.uk/blog/posts/why-escape-on-input-is-a-bad-idea/
A na vstupu se má používat pg_query_params.
Přečteno 20 712×
Přečteno 18 551×
Přečteno 17 778×
Přečteno 17 524×
Přečteno 16 220×