Testovací spam 2
Tak co, dokážu postnout reklamní link? http://www.fit.cvut.cz/levne/vypracovane/pisemky/zde
Tak co, dokážu postnout reklamní link? http://www.fit.cvut.cz/levne/vypracovane/pisemky/zde
answered 2014-11-22 14:57:38 +0100
This post is a wiki. Anyone with karma >75 is welcome to improve it.
Tento spam vzniknul tak, že jsem odkaz napsal jako http:www.fit.cvut.cz/levne/vypracovane/pisemky/zde
- tzn. že jsem dvojtečku nahradil jejím HTML zápisem přes entity. Regulární výraz, který na to AskBot používá, na to nezabere. Kdyby zabral, tak můžu obdobně použít třeba Dttp://www.fit.cvut.cz/levne/vypracovane/pisemky/zde
atd. Tzn. než se začne v askbot/models/__init__.py
ve funkci user_assert_can_post_text
testovat regulární výraz, měl by se napřed text
zbavit všech escapovacích sekvencí pro HTML/XML.
Btw., koukám, že regexp v askbot/utils/markup.py
je špatně, protože obsahuje věci jako [a-zA-Z&]
(zjevně to autoři askbotu odněkud blbě zkopírovali...).
Soudě podle pokusů je těch problematických míst docela hodně. To zase někdo z vývojářů chtěl být hodně důkladný a orientoval se podle toho, který regulární výraz je nejdelší, tak bude i nejlepší. Skoro bych se přimlouval k tomu, ten test na regulární výraz v user_assert_can_post_text
zahodit úplně a nahradit ho něčím jako if (re.search('\b(https?|ftp)://', to_lowercase(html_unescape(text)), 'http://')) die_horribly
, samozřejmě s příslušnými Pythonovskými funkcemi na místě to_lowercase (převede text na lower case, jaké překvapení) a html_unescape (nevím, jestli něco takového bude existovat, ale v podstatě stačí funkce, která prochází text a všechno nechává být, jen Ӓ převede na znak s kódem 1234, ꯍ na znak s hexa kódem abcd a některé vyjmenované &text; na příslušný znak - např. & na ampersand). Pro účely odstranění spammerů by pro začátek asi stačilo i to, že to_lowercase a html_unescape jen vrátí vstupní řetězec beze změny).
Ano, přiznávám to, při hledání neošetřených vstupů jsem šťoura.
Josef Kokeš ( 2014-11-22 15:22:30 +0100 )editTakže asi takhle? https://github.com/hroncok/askbot-installed/commit/a21dfa96c7e1507509670230edeafabec84cf18c - myslím, že by to mohlo fungovat
Miro Hrončok ( 2014-11-22 16:15:38 +0100 )editNa začátek regulárního výrazu prosím \b
(začátek slova). Jdu zkusit pár experimentů.
Asked: 2014-11-22 14:49:15 +0100
Seen: 191 times
Last updated: Nov 22 '14
Pokus bez entit: http:[email protected]/levne/vypracovane/pisemky/zde (do jmena dam podtrzitko).
Spam ( 2014-11-22 15:05:13 +0100 )editPokus s IPv6: http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html (IPv6 asi taky neni reseno)
Spam ( 2014-11-22 15:07:42 +0100 )editPokus 3: http://8.8.8.8/blablabla (nizka cisla v IPv4)
Spam ( 2014-11-22 15:09:43 +0100 )editPokus 4: http://88.88.88.88/blablabla (trochu vetsi cisla)
Spam ( 2014-11-22 15:10:02 +0100 )editPokus 5: http://pokus.onion/xyz (>2 znakova domena prvni urovne je explicitne vyjmenovana)
Spam ( 2014-11-22 15:11:55 +0100 )editPokus4a: http://123.234.88.135/zzz (staci i jedno cislo mensi nez 100).
Spam ( 2014-11-22 15:21:19 +0100 )editPokus 6: http://www.fit.cvut.cz/neosetreno (entity cislem)
Spam ( 2014-11-22 16:43:34 +0100 )editPokus 7: http://www.fit.cvut.cz/neosetreno (entity desitkovym cislem)
Spam ( 2014-11-22 16:46:44 +0100 )editPokus 8: http://www.fit.cvut.cz/neosetreno (entita pro dvojtecku jmenem)
Spam ( 2014-11-22 16:47:18 +0100 )editPokus 9: http://8.8.8.8/test (číselná IP adresa s malými čísly - tohle by nemělo projít!!)
Spam ( 2014-11-22 16:53:08 +0100 )editTestuje se to vůbec v komentářích?
Miro Hrončok ( 2014-11-22 19:07:35 +0100 )editPokud 9 mi jako nový příspěvek neprojde.
Miro Hrončok ( 2014-11-22 19:12:07 +0100 )edithttp://8.8.8.8/test (jako komentář to projde).
Spam ( 2014-11-22 19:22:46 +0100 )edit