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...).
2 | No.2 Revision |
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...).
3 | No.3 Revision |
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).