Re: [SAde] RE-Nachhilfe, HTML-Tags (Lösung)
Wolfram Schroeder <[email protected]> Wed, 15 Oct 2003 17:09:09 +0200
| Newsgroups | gmane.mail.spam.spamassassin.devel.de |
|---|---|
| Message-ID | <[email protected]> |
Ingo Wiarda schrieb:
> Am Mittwoch 15 Oktober 2003 01:22 schrieb Wolfram Schroeder:
>
>
>>>Wobei ich auch schon nach einer Regel für Sachen wie:
>>>"Med</aristotelian>ica<exchangeable>tio</adorn>ns li<bowen>ke="
>>>gesucht habe.
>>
>>Ich habe gerade eine Liste von gültigen HTML-Tags fertig gemacht,
>> habe damit aber im Grunde das gleiche Problem: Wie fische ich die einfachen
>>Tags ohne Attribute raus, die da NICHT hinein passen?
>
>
> Einfache Tags ohne Leerzeichen / Attribute könnte man mit negativem Lookahead
> erwischen, oder?
> z.B. /<\/?(?!body|html|p|br|h\d)[^\s>]+>/i matcht, wenn das Tag z.B. nicht
> <body> sondern <b%dy> ist.
> Die Lösung ist noch nicht optimal, da ein Tag wie <bodyslam> nicht triggern
> würde.
>
> Allerdings kommt man um eine Regex, die alle Tags als Alternation testet, kaum
> herum. Spätestens dann, wenn der Spammer von <k!f"§sf> auf <Platon> umsteigt.
> (oder, um bei realem Spam zu bleiben:
> "<wsbE>reet an<Rqo>d Fa<Kx>st Next<m>-Day Ship<t>ments<br>")
Yo,
Ich habe gestern nacht noch 2 Stunden rumgebastelt, die Antwort auf
meine ursprüngliche Frage lautet etwa:
rawbody WS_WEIRD_HTML5
/<(?:\/|(?!\/))(?!h[1-6]\b)\w*[0-9[:^alpha:]jwxz]\w*>/i
Damit erwischt man simple HTML-Tags, in dem illegale Zeichen stehen,
habe ich mit einigen legalen und illegalen Tags getestet. Aus
akademischen Gründen eine Erläuterung:
Die erste Gruppe mit der Alternative drin besagt, dass es entweder ein /
geben soll oder nicht, also im Prinzip das selbe wie \/?, ALLERDINGS mit
dem Unterschied, dass in der Konstruktion ?:\/|(?!\/) das / bereits
"weg" ist, wenn eines da war. Sonst bekommt man das Problem, dass </a> -
völlig legitimes HTML - ebenfalls matcht, nämlich die hintere
Characterklasse (nicht alpha) und \w*. Das passiert mit der Konstruktion
nicht.
Die zweite Gruppe fängt mit einem negative lookahead h1-h6 ab, die ja
legitimes HTML mit einer Zahl drin darstellen.
Der Rest ist straightforward. Die Regel fängt auch / ab, allerdings
nicht <! ... ich habe heute fest stellen müssen, dass es tatsächlich
Mailer gibt, die Kommentare rummailen - Outlook. Aber das ist Kleinkram.
Die Idee mit den einzelnen Tags ist natürlich viel besser, die habe ich
heute morgen umgesetzt mit dem gestern abend erworbenen Wissen:
rawbody WS_WEIRD_HTML
/<(?:\/|(?!\/))(?!(?:!|A|ABBR|ACRONYM|ADDRESS|APPLET|AREA|B|BASE|BASEFONT|BDO|BIG|BLOCKQUOTE|BODY|BR|BUTTON|CAPTION|CENTER|CITE|CODE|COL|COLGROUP|DD|DEL|DFN|DIR|DIV|DL|DT|EM|FIELDSET|FONT|FORM|FRAME|FRAMESET|H1|H2|H3|H4|H5|H6|HEAD|HR|HTML|I|IFRAME|IMG|INPUT|INS|ISINDEX|KBD|LABEL|LEGEND|LI|LINK|MAP|MENU|META|NOFRAMES|NOSCRIPT|OBJECT|OL|OPTGROUP|OPTION|P|PARAM|PRE|Q|S|SAMP|SCRIPT|SELECT|SMALL|SPAN|STRIKE|STRONG|STYLE|SUB|SUP|TABLE|TBODY|TD|TEXTAREA|TFOOT|TH|THEAD|TITLE|TR|TT|U|UL|VAR)\b)[^>]*>/i
Die erste Gruppe ist das Konstrukt von oben, die zweite nur, damit ich
nicht überall \b ans Ende schreiben muss, die innere darin für die
Alternation. Statt .*> am Ende habe ich das Konstrukt von Dir geklaut,
das ist korrekter.
Meine Testfälle sehen so weit ganz gut aus. Die Laufzeit der Regel ist
mit 3.362s sehr gut im Vergleich zu 18.409s des unscheinbaren
/(?:top.{0,10}|sonder)aktion/i auf einer DE/EN Wortliste - in der
Wortliste stehen allerdings keine gültigen Tags, deswegen ist die Zahl
nicht sonderlich aussagekräftig. Harry Potter in HTML wäre ein besserer
Testfall (oder sonstwas, meine mail-Adresse habt Ihr ja). Die Regel kann
noch weiter optimiert werden durch Alternativen und Characterklassen wie
z.B. in OPT(?:GROUP|ION) oder T[HRT]. Mache ich später, ich belasse die
Regel im Wiki bei http://www.exit0.us/index.php/WolfRam .
Bin ich gut, oder was?
>>>Vielleicht läßt sich dieser Test auf HTML-Mails begrenzen, mal sehen.
>>
>>Das wäre meine nächste Frage gewesen!
>
>
> Vielleicht mit etwas in der Form
> meta TAG_TEST (HTML_MESSAGE && _STRANGE_TAGS)
> wobei _STRANGE_TAGS den Test für einfache HTML-Tags enthält.
Versuche ich dann morgen, wenn ich wieder im Betrieb bin.
> Nächste Frage: welchen Score würdest Du so einem Test zumessen?
Hmmmm ... aus dem Bauch raus 0.5, 0.6. Ich sehe ein paar Probleme:
1) Geek-Schreibweise <ärger!>GRRR</ärger!>, wie Du erwähnt hattest.
Kommt ein bischen auf die Umgebung an, ob man das in Betracht ziehen möchte.
2) Nicht lange genug getestet, ich arbeite mich von 0.1 hoch, ich muss
auch meine Kumpels motivieren, mit ein paar HTML-Mails zu schicken. Ich
hatte heute nur eine.
3) XML in 2006, sollte aber mit Deiner META zu erledigen sein.
4) Umstellungen Ende 2005, wenn keiner mehr was von der Regel weiß und
sie allen um die Ohren fliegt, wenn MS/GMX/AOL/... auf komische Ideen
kommt ... ist ja nicht unerhört.
Daher in meinem "ziemlich sicher"-Bereich 0.5-1.0 bei einem Limit von
5.5 aktuell.
==>> Ich fände es TOLL, wenn jemand mit mehr Traffic als ich/einem
==>> Test-Setup mal vorsichtig testen könnte!! Danke!
> Ingo
Danke für's Antworten!
Wolfram
-------------------------------------------------------
This SF.net email is sponsored by: SF.net Giveback Program.
SourceForge.net hosts over 70,000 Open Source Projects.
See the people who have HELPED US provide better services:
Click here: http://sourceforge.net/supporters.php