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