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 Nov 22 '14
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).
Takže asi takhle? https://github.com/hroncok/askbot-installed/commit/a21dfa96c7e1507509670230edeafabec84cf18c - myslím, že by to mohlo fungovat
Miro Hrončok (Nov 22 '14)Na začátek regulárního výrazu prosím \b
(začátek slova). Jdu zkusit pár experimentů.
Asked: Nov 22 '14
Seen: 191 times
Last updated: Nov 22 '14
Pokus bez entit: http://_@www.fit.cvut.cz/levne/vypracovane/pisemky/zde (do jmena dam podtrzitko).
Spam (Nov 22 '14)Pokus s IPv6: http://[FEDC:BA98:7654:3210:FEDC:BA98:7654:3210]:80/index.html (IPv6 asi taky neni reseno)
Spam (Nov 22 '14)Pokus 3: http://8.8.8.8/blablabla (nizka cisla v IPv4)
Spam (Nov 22 '14)Pokus 4: http://88.88.88.88/blablabla (trochu vetsi cisla)
Spam (Nov 22 '14)Pokus 5: http://pokus.onion/xyz (>2 znakova domena prvni urovne je explicitne vyjmenovana)
Spam (Nov 22 '14)Pokus4a: http://123.234.88.135/zzz (staci i jedno cislo mensi nez 100).
Spam (Nov 22 '14)Pokus 6: http://www.fit.cvut.cz/neosetreno (entity cislem)
Spam (Nov 22 '14)Pokus 7: http://www.fit.cvut.cz/neosetreno (entity desitkovym cislem)
Spam (Nov 22 '14)Pokus 8: http://www.fit.cvut.cz/neosetreno (entita pro dvojtecku jmenem)
Spam (Nov 22 '14)Pokus 9: http://8.8.8.8/test (číselná IP adresa s malými čísly - tohle by nemělo projít!!)
Spam (Nov 22 '14)Testuje se to vůbec v komentářích?
Miro Hrončok (Nov 22 '14)Pokud 9 mi jako nový příspěvek neprojde.
Miro Hrončok (Nov 22 '14)http://8.8.8.8/test (jako komentář to projde).
Spam (Nov 22 '14)