Regex klobasa ki zazna XSS

Ima kdo kaj uporabnega za sharat?

Rad bi obdržal samo tage za bold, italic, br in linke. Pa še to brez raznih (onload="blala" onmouseover,...)

hvala mojstri ;)

link

10 odgovorov

če kaj pomaga, PHP-Fusion ima to zaščito

if ((preg_match("/<[^>]*script*\"?[^>]*>/i", $check_url)) || (preg_match("/<[^>]*object*\"?[^>]*>/i", $check_url)) ||
            (preg_match("/<[^>]*iframe*\"?[^>]*>/i", $check_url)) || (preg_match("/<[^>]*applet*\"?[^>]*>/i", $check_url)) ||
            (preg_match("/<[^>]*meta*\"?[^>]*>/i", $check_url)) || (preg_match("/<[^>]*style*\"?[^>]*>/i", $check_url)) ||
            (preg_match("/<[^>]*form*\"?[^>]*>/i", $check_url)) || (preg_match("/\([^>]*\"?[^)]*\)/i", $check_url))) {
            $return = true;
        }

DiTi, za nekaj je dobro, ampak tole gre čez

<IMG SRC=http://www.google.si/images/logos/ps_logo2.png onload=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>

Obstaja kakšna bulletproof zadeva ali bo treba it na roke čez morje XSS primerov in sproti dopolnjevat regex?

Ok, prišel sem do spoznanja, popravite me če se motim.
- bolje je narediti whitelist namesto blacklista (izbrati kaj dovoliti namesto kaj prepovedati)
- potrebno je sparsati HTML v DOM in preveriti vsak element ali so njegovi atributi v whitelisti in preveriti je treba tudi vrednosti dovoljenih atributov (prepovedati nedovoljene protokole npr. href=javascript...)

pa lep večer še naprej in čimmanj XSS-ov ;)

Vem da je glupo na lastne poste odgovarjat, ampak tole moram prilepit
http://htmlpurifier.org/

Jaz delam z CodeIgniter in predlagam, da si ga downloadaš, pregledaš in skopiraš ta del iz Input razreda (/system/libraries/) in morda popraviš po tvojih željah.

blackmamba:
DiTi, za nekaj je dobro, ampak tole gre čez

<IMG SRC=http://www.google.si/images/logos/ps_logo2.png onload=&#0000106&#0000097&#0000118&#0000097&#0000115&#0000099&#0000114&#0000105&#0000112&#0000116&#0000058&#0000097&#0000108&#0000101&#0000114&#0000116&#0000040&#0000039&#0000088&#0000083&#0000083&#0000039&#0000041>

Obstaja kakšna bulletproof zadeva ali bo treba it na roke čez morje XSS primerov in sproti dopolnjevat regex?

mogoče veš kako je zakodirani tisti onload javascript del?

To je "Long UTF-8 Unicode encoding without semicolons", kodo sem našel tu http://ha.ckers.org/xss.html

Drugače sem pa s "htmlpurifier" več kot zadovoljen in se z xss ne obremenjujem več :P

hvala, še en uporaben seznam: http://code.google.com/p/wfuzz/source/browse/trunk/wordlist/Injections/?r=2

Ja seveda 100x lazje je narediti whitelist kot pa blacklist...priporocam ti da prvo uporabis regex, ki bo dobil npr vsebino znotraj <i> & </i> in potem vsebino znotraj tagov se filtriras z html entities in bi moral biti problem resen..

Drugace pa ce govoriva za XSS pri iskanju je najbolje da za iskanje uporabis POST namesto GET, ker potem napadalec nima koristi za razne redirecte ali cookie stealerje...
Ce se gre pa za forum pa le previdno, da se ne bo kak HTML injection pojavil na tvoji strani :)

drugače je mod security z gotroot rulesi boljša stvar, kot pa da greš v phpju hardcodat to... ne boš dobil željenega efekta... XSS rulesov je pa malo morje tam, tako da se lahko malo odločiš kaj želiš in kaj ne.