Ask Your Question
0

Testovací spam 2

asked 2014-11-22 14:49:15 +0100

Spam gravatar image

updated 2014-11-22 14:50:56 +0100

Tak co, dokážu postnout reklamní link? http://www.fit.cvut.cz/levne/vypracovane/pisemky/zde

edit retag flag offensive close delete

Comments

Pokus bez entit: http:[email protected]/levne/vypracovane/pisemky/zde (do jmena dam podtrzitko).

Spam ( 2014-11-22 15:05:13 +0100 )edit

Pokus 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 )edit

Pokus 3: http://8.8.8.8/blablabla (nizka cisla v IPv4)

Spam ( 2014-11-22 15:09:43 +0100 )edit

Pokus 4: http://88.88.88.88/blablabla (trochu vetsi cisla)

Spam ( 2014-11-22 15:10:02 +0100 )edit

Pokus 5: http://pokus.onion/xyz (>2 znakova domena prvni urovne je explicitne vyjmenovana)

Spam ( 2014-11-22 15:11:55 +0100 )edit

1 Answer

Sort by » oldest newest most voted
2

answered 2014-11-22 14:57:38 +0100

this post is marked as community wiki

This post is a wiki. Anyone with karma >75 is welcome to improve it.

updated 2014-11-22 15:20:09 +0100

Josef Kokeš gravatar image

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).

edit flag offensive delete publish link more

Comments

1

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 )edit

Vynikající :-).

Tomáš Kalvoda ( 2014-11-22 15:57:04 +0100 )edit

Takž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 )edit

Nasazeno, prosím o penetrační test ;)

Miro Hrončok ( 2014-11-22 16:18:35 +0100 )edit

Na začátek regulárního výrazu prosím \b (začátek slova). Jdu zkusit pár experimentů.

Josef Kokeš ( 2014-11-22 16:41:37 +0100 )edit

Your answer

Please start posting your answer anonymously - your answer will be saved within the current session and published after you log in or create a new account. Please try to give a substantial answer, for discussions, please use comments and please do remember to vote (after you log in)!

Add answer

[hide preview]

Question tools

Follow
1 follower

Stats

Asked: 2014-11-22 14:49:15 +0100

Seen: 191 times

Last updated: Nov 22 '14