sql >> Databáze >  >> RDS >> Mysql

Prevence skriptování na straně serveru, XSS

Nikdy neodesílejte do streamu HTML žádné bity dat, které nebyly předány přes htmlspecialchars() a máte hotovo. Jednoduché pravidlo, které se snadno dodržuje, zcela eliminuje jakékoli riziko XSS.

Jako programátor je to vaše práce to udělat.

Můžete definovat

function h(s) { return htmlspecialchars(s); }

if htmlspecialchars() je příliš dlouhý na to, aby zapsal 100krát do souboru PHP. Na druhou stranu pomocí htmlentities() není vůbec nutné.

Klíčovým bodem je:Existuje kód a jsou zde data. Pokud obojí smícháte, dojde ke špatným věcem.

V případě HTML jsou kódem prvky, názvy atributů, entity, komentáře. Data jsou všechno ostatní. Data musí být escapován, aby nedošlo k záměně za kód.

V případě adres URL je kód schéma, název hostitele, cesta, mechanismus řetězce dotazu (? , & , = , # ). Data jsou vše v řetězci dotazu:názvy parametrů a hodnoty. Musí být escapován, aby nedošlo k záměně za kód.

Adresy URL vložené do HTML musí být dvakrát escapován (escapováním adresy URL a HTML-escaping), aby bylo zajištěno správné oddělení kódu a dat.

Moderní prohlížeče jsou schopny analyzovat úžasně rozbité a nesprávné označení do něčeho užitečného. Tato schopnost by však neměla být zdůrazňována. Skutečnost, že něco funguje (například adresy URL v <a href> bez použití správného kódování HTML) neznamená, že je dobré nebo správné to udělat. XSS je problém, který má kořeny v a) lidech, kteří si neuvědomují oddělení dat/kódu (tj. „únik“) nebo v těch, kteří jsou nedbalí, a b) v lidech, kteří se snaží být chytří ohledně toho, která část dat nepotřebují uniknout.

XSS je dost snadné se vyhnout, pokud se ujistíte, že nespadáte do kategorií a) a b).



  1. Získání pořadí řádku v dotazu mysql

  2. Vyberte čas mezi dvěma časy mysql

  3. Společný tabulkový výraz v MySQL

  4. Jak najdu duplikáty ve více sloupcích?