Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

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

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

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

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