deezlepower productions
Ich bin ein Pixel Logo by Matze Login Smart by Matze
 Benutzername
 Kennwort
 in Cookie speichern


Registrierung
Ich bin ein Pixel Logo by Matze Hauptmenü Smart by Matze
· Home
· Mein Profil
· Logout

Bereiche
· Forum
· User-Galerie
· Hardware Guide

================
· Regionalforen
· Galerie
· Downloads
· Web-Links
· Nutzungsbestimmungen
· Mitglieder
· Team & Kontakt
· Spende an den Club

================
Ich bin ein Pixel Logo by Matze Wer ist online? Smart by Matze
Aktuell sind hier 1530 Besucher und 1 Mitglied online.

Anmeldung


Wir haben 10605 registrierte Mitglieder.
Ich bin ein Pixel Logo by Matze Neueste Posts Smart by Matze
 Fahrertür Bowdenzu...
 RADIO-CODE
 FELGEN MIT/ODER OH...
 Verkaufe Roadster
 Herzliche Einladun...
 Teppich hinter den...
 Wieder Roady-Besit...
 Sommerreifen
 Diagnosegerät
 Smart Roadster bek...
 Suche 17 Zoll Felgen
 Roadster verliert Öl
 Schalterabdeckung ...
 Suche rechtes Rück...
 Smart Roadster Coupe
 Loses Kabel hängt ...
 (B) Roadster Coupé...
 rechter mechanisch...
 Der Neue aus Witte...
 Verdeck Reparatur ...

zum Forum
Ich bin ein Pixel Logo by Matze Themen Smart by Matze
· alle Themen
· Bild / Video
· Presse
· Technik
Ich bin ein Pixel Logo by Matze Inhalte Smart by Matze
· techn. Daten
· Motorpflege


Du bist nicht eingeloggt!

 < Voriges Thema  Nächstes Thema > Aufsteigend sortiern Absteigend sortieren
Autor: Betreff: Reguläre Ausdrücke - wer hat eine Idee?

ehemaliger Administrator

Beiträge: 1361
Registriert: 2.4.2003
Status: Offline
  erstellt am: 14.9.2006 um 11:51 Uhr:
Anlässlich unseres aktuellen Sicherheitsproblems (siehe hier) bitte ich jene, die reguläre Ausdrücke im Schlaf beherrschen, mal um Mithilfe...

Das Forum filtert nicht allen Schadcode zuverlässig heraus. Unser Hacker hatte so etwas eingeschleust:
code:
<font color="green" sty1e=background-image:url(Java5cript:window.open(...));">

Gefährlich ist dabei das JavaScript im style-Attribut. Eigentlich sollten alle style-Attribute komplett herausgefiltert werden. Dazu gibt es in der Forumssoftware diesen regulären Ausdruck:
code:
|STYLE\s*=\s*"[^"]*"|si

Wie man sieht, erwischt der aber obige Konstruktion nicht, weil dort nach dem = das " fehlt. Hat jemand eine Idee, mit was für einer RegExp man auch solche Fälle erschlagen könnte?
 
____________________



Beiträge: 1836
Registriert: 3.12.2003
Status: Offline
erstellt am: 14.9.2006 um 12:24 Uhr:
Hi Sam!


Ichkenne PHP nicht (progge mehr mit Perl) aber in RegExps bedeutet das Cirumflex immer, dass ein String mit dem danach Deklarierten beginnen _muss_

In dem Fall würde ich versuchen, das [^"] herauszunehmen, und erstmal testen, was passiert.

PHP-RegExp-Tutorial: http://weblogtoolscollection.com/regex/regex.php

Pata

[Editiert am 14/9/2006 von Pata]
 
____________________


die schönsten Kurven sind nicht die vom Roadster ;-)




Beiträge: 1836
Registriert: 3.12.2003
Status: Offline
erstellt am: 14.9.2006 um 12:26 Uhr:
Noch was: Hacker liest bestimmt mit.

Alle, die dazu etwas sagen können, sollten Sam vielleicht lieber PNs schreiben.

Sam: Für die Antworten auch!

Pata

[Editiert am 14/9/2006 von Pata]
 
____________________


die schönsten Kurven sind nicht die vom Roadster ;-)




Beiträge: 3645
Registriert: 7.11.2003
Status: Offline
  erstellt am: 14.9.2006 um 12:50 Uhr:
Was Ihr mach, ist egal, aber macht was!!!

Sonst ergeht es uns am Ende noch so -> http://www.granadaundscorpioforum.de/
 
____________________
greetz Irishman...


Wer nicht überzeugen kann, sollte wenigstens Verwirrung stiften...

* Moderator *

Beiträge: 2907
Registriert: 9.6.2004
Status: Offline
  erstellt am: 14.9.2006 um 13:08 Uhr:
 
____________________


Leben bedeutet Veränderung -
ob man will oder nicht.

ehemaliger Administrator

Beiträge: 1361
Registriert: 2.4.2003
Status: Offline
erstellt am: 14.9.2006 um 13:39 Uhr:
Zitat:
... in RegExps bedeutet das Cirumflex ...
Wenn ich das richtig sehe, dann bedeutet
code:
|STYLE\s*=\s*"[^"]*"|si

1. das Wort STYLE
2. eine beliebige Anzahl Leerzeichen
3. ein =
4. eine beliebige Anzahl Leerzeichen
5. ein "
6. eine beliebige Anzahl an Zeichen, die kein " sind
7. ein "

Selbst umgangssprachlich formuliert, fällt mir gerade nichts ein, wie man eventuell nicht vorhandene " mit berücksichtigen könnte. Vielleicht von STYLE bis zum Ende des HTML-Tags bei > einfach alles rauswerfen, und dabei in Kauf nehmen, dass eventuell auch gewünschte Attribute mit eliminiert werden?

Zitat:
Noch was: Hacker liest bestimmt mit.
Hmm, kann sein. Aber die neue Lösung sollte dann eigentlich so wasserdicht werden, dass man sie nicht geheimhalten muss. "Security through obscurity is no security at all." Und das, was ich bis jetzt hier geschrieben habe, ist ohnehin bekannt.
 
____________________

ehemaliger Administrator

Beiträge: 1361
Registriert: 2.4.2003
Status: Offline
erstellt am: 14.9.2006 um 13:48 Uhr:
Zitat:
Was Ihr mach, ist egal, aber macht was!!!
KEINE PANIK! (in großen freundlichen Buchstaben)

Es ist hier nicht das Forum gehackt worden*), sondern "nur" eine JavaScript-Sicherheitslücke in bestimmten Browsern (IE gehört auf jeden Fall dazu, Firefox 1.5 nicht und Opera 9 auch nicht) ausgenutzt worden, um die Logindaten von Benutzern auszuspähen. Wer den IE benutzt, sollte JavaScript besser abschalten.


*) *aufholzklopf* Wer weiß, was für Schwachstellen das Forum so haben mag...
 
____________________

ehemaliger Administrator

Beiträge: 1361
Registriert: 2.4.2003
Status: Offline
erstellt am: 14.9.2006 um 14:28 Uhr:
Zitat:
Vielleicht von STYLE bis zum Ende des HTML-Tags bei > einfach alles rauswerfen, und dabei in Kauf nehmen, dass eventuell auch gewünschte Attribute mit eliminiert werden?
So, genau das habe ich jetzt gemacht. Sicherheitshalber. Zumindest bis jemand hier noch eine bessere Idee hat...
 
____________________



Beiträge: 1836
Registriert: 3.12.2003
Status: Offline
erstellt am: 14.9.2006 um 14:42 Uhr:
Hallo Sam!

>> So, genau das habe ich jetzt gemacht. Sicherheitshalber. Zumindest bis jemand hier noch eine bessere Idee hat...

Hauptsache, die Möglichkeit ist erst mal weg. Wäre noch zu prüfen und zu testen, da in der von Dir zitierten RegExp das Wort style uppercase ist (großgeschrieben), ob die RegExp auch matcht, wenn style lowercase steht.

Pata
 
____________________


die schönsten Kurven sind nicht die vom Roadster ;-)


ehemaliger Administrator

Beiträge: 1361
Registriert: 2.4.2003
Status: Offline
erstellt am: 14.9.2006 um 15:14 Uhr:
Um upper/lowercase zu ignorieren ist das i am Ende der RegExp zuständig.
 
____________________



Beiträge: 2384
Registriert: 16.4.2003
Status: Offline
erstellt am: 14.9.2006 um 15:49 Uhr:
Ich kenne das i in RegExp nicht, aber bin der Meinung, dass es so funktionieren sollte:
code:

(STYLE|style)\s*=\s*"[^"]*"

Erklärung:
(STYLE|style) Zeichenkette STYLE oder style
\s* Whitespaces 0 bis n-mal
= =
\s* Whitespaces 0 bis n-mal
" Anführungszeichen
[^"]* Zeichen außer Anrführungszeichen beliebig oft
" Anführungszeichen

 
____________________



Beiträge: 1836
Registriert: 3.12.2003
Status: Offline
erstellt am: 14.9.2006 um 15:53 Uhr:
>> Um upper/lowercase zu ignorieren ist das i am Ende der RegExp zuständig.

...steht das i-Flag doch für ignore case - hatte ich übersehen, sorry.

Ich muss eben mal weg, melde mich wieder, wenn ich die RegExp austeste.

Pata
 
____________________


die schönsten Kurven sind nicht die vom Roadster ;-)




Beiträge: 1836
Registriert: 3.12.2003
Status: Offline
erstellt am: 14.9.2006 um 15:57 Uhr:
>>
code:

(STYLE|style)



Nein, das i-Flag ist besser. Nur auf STYLE ode style zu prüfen bringt deswegen wenig, weil der Hacker ja auch sTYle schreiben könnte, was einige Browser durchaus interpretieren würden.

Pata
 
____________________


die schönsten Kurven sind nicht die vom Roadster ;-)




Beiträge: 1836
Registriert: 3.12.2003
Status: Offline
erstellt am: 14.9.2006 um 17:37 Uhr:
Solele, ich glaube, ich habe was brauchbares:

code:

|STYLE\s*=\s*"*[^"]*"|si



Durch das i-Flag wird nicht nach Groß-/Kleinschreibung unterschieden (STYLE, style, StyLe werden gematcht).
Die RegExp "bedeutet":

Match mir jeden String bestehend aus:

STYLE gefolgt von
\s* keins oder beliebig viele Leerzeichen, gefolgt von
= einem Istgleichzeichen, gefolgt von
\s* keins oder beliebig viele Leerzeichen, gefolgt von
"* keins oder beliebig viele Anführungszeichen gefolgt von
[^"]* alle mögliche, beliebig vorkommene Zeichen, die kein Anführungszeichen sind, gefolgt von
" einem abschließenden Anführungszeichen

Getestet mit einem kleinen Perl-Script und einem Array besetehend aus drei verschiedenen, möglichen Tags mit Attributen (auch hinter dem style-Attribut) nach dem Muster, wie SAM es zuerst gepostet hatte: diese anderen Attribute bleiben unberührt, es wird nur nach style und seinem Inhalt gesucht.

Pata
 
____________________


die schönsten Kurven sind nicht die vom Roadster ;-)




Beiträge: 49
Registriert: 6.5.2005
Status: Offline
erstellt am: 14.9.2006 um 18:08 Uhr:
das problem geht meiner meinung nach tiefer als das reine style ersetzen, da gibt es noch andere möglichkeiten durch den code.

desweiteren fällt mir grad kein (sinnvolles^^) regexp ein der das filtern könnte was der typ benutzt hat (naemlich ne style anweisung die nicht in " gesetzt war)

ich werd mich also heute abend mal hinsetzen und guggen was man da alles verändern muss, um das sicher zu bekommen.

alternativ wäre ein anderes forum, bei dem auch noch von seiten der entwickler bugfixing betrieben wird, durchaus sinnvoll

@pata dein regexpt filtert zb kein style=color:green;

[Editiert am 14/9/2006 von HSINC]



Beiträge: 1836
Registriert: 3.12.2003
Status: Offline
erstellt am: 14.9.2006 um 18:45 Uhr:
>> @pata dein regexpt filtert zb kein *** (wird schon ersetzt, kann dich also nicht zitieren)


Ja, die Ursprungs-RegExp aber auch nicht. In Perl würde ich es so machen:

code:

$teststring =~ s|STYLE\s*=\s*"*[^"]*"{0,1} (.*)|matched_and_replaced $1|si;



Matcht aber auch nur, wenn der Tag nicht unmittelbar nach der style-Angabe geschlossen wird... Daher:
Um richtig was zu machen, müsste man natürlich mehr über den Code wissen (obwohl, wie gesagt, ich kenne PHP nicht im geringsten), wie was wo wie oft abgefragt wird usw.

Pata

[Editiert am 14/9/2006 von Pata]
 
____________________


die schönsten Kurven sind nicht die vom Roadster ;-)




Beiträge: 2384
Registriert: 16.4.2003
Status: Offline
erstellt am: 14.9.2006 um 21:07 Uhr:
ein pragmatischer Ansatz wäre alle Strings, die die Zeichenfolge beinhalten zu filtern, egal ob im Style-Attribut oder nicht.
 
____________________



Beiträge: 1836
Registriert: 3.12.2003
Status: Offline
erstellt am: 14.9.2006 um 23:02 Uhr:
Hallo Cobold!


Nicht vergessen: onclick, onmouseover und alle möglichen Event-Handler! Aber ich glaube, die werden eh schon gefiltert, sonst hätte wir viel öfters böse(TM) Hacks.

Pata
 
____________________


die schönsten Kurven sind nicht die vom Roadster ;-)




Beiträge: 295
Registriert: 12.8.2005
Status: Offline
erstellt am: 15.9.2006 um 09:57 Uhr:
@SAM: ich weiss jetzt nicht genau, warum und wie Du das Zeugs genau matchst und was alles erlaubt ist, aber warum machst Du nicht eine Positivliste?



Beiträge: 295
Registriert: 12.8.2005
Status: Offline
erstellt am: 15.9.2006 um 09:58 Uhr:
Achja, ich kann auch hernehmen, Dein Test auf " glaub ich funktioniert nicht.



Beiträge: 295
Registriert: 12.8.2005
Status: Offline
erstellt am: 15.9.2006 um 10:15 Uhr:
Ich hab da nochmal nachgedacht. Statt ewig herumzugrasen was man alles sperren muss würd ich (in Perl) sowas wie

(
p => [align => 1, valign => 1, ...],
ul => [],
img => [src => 1, alt => 1, ...]
)

machen, dann die <.+?> Sachen rausholen, den Tag anschaun, die Attribute nach Leerzeichen und = splitten und dann nur übernehmen, wenn $hash{$tag}{$attrib}. Alles andere einfach weglöschen.

[UPDATE]
Also wenns ist, ich kann Dir sowas in Perl (ich kann leider kein PHP) schreiben, sollt aber in PHP recht ähnlich ausschaun.

[Editiert am 15/9/2006 von DinA5]

ehemaliger Administrator

Beiträge: 1361
Registriert: 2.4.2003
Status: Offline
erstellt am: 15.9.2006 um 12:54 Uhr:
Erst mal vielen Dank für Eure Mithilfe.

@ DinA5:
Alles mittels Positivliste zu behandeln wäre sicher die beste Lösung. Nur ist die Forumssoftware leider anders strukturiert.

Es gibt zwar eine - sogar über GUI bedienbare - Positivliste der erlaubten HTML-Tags. Deren Attribute kann man aber nur komplett verbieten oder erlauben. Also müssen wir Attribute erlauben, sonst kann man z.B. nicht verlinken.

Dann gibt es als zweite Maßnahme noch eine Negativliste zum Ausfiltern alles Bösen. Die ist eher rudimentär...
@ Pata:
Zitat:
alle möglichen Event-Handler! Aber ich glaube, die werden eh schon gefiltert
Nö.

Um nicht alles mögliche im Code umwerfen zu müssen, habe ich jetzt nur die Negativliste (RegExp's) um das erweitert, was Ihr hier erwähnt habt, und was mir noch eingefallen ist. Im Zweifelsfall filtere ich dabei eher mit der Holzhammermethode.

Zusätzlich zu den Originalfiltern aus der Forumssoftware eliminiere ich jetzt noch:

- das STYLE-Attribut (immer! jetzt auch zuverlässig!)
- alle Event-Handler-Attribute
- den String JAVA5CRIPT: (egal, wo auch immer er steht --> Holzhammer )
- den String .C00KIE (auch egal, wo immer er steht)
 
____________________



Beiträge: 295
Registriert: 12.8.2005
Status: Offline
erstellt am: 15.9.2006 um 13:43 Uhr:
@SAM: achso, da kann man nicht eigenen Code reinwurschteln?

ehemaliger Administrator

Beiträge: 1361
Registriert: 2.4.2003
Status: Offline
erstellt am: 15.9.2006 um 13:57 Uhr:
Doch, kann man. Das mache ich ja schon. Nur habe ich keine Lust auf großflächige Änderungen.
 
____________________



Beiträge: 295
Registriert: 12.8.2005
Status: Offline
erstellt am: 15.9.2006 um 14:11 Uhr:
Weiss zwar nicht, obs hier ins Forum gehört, aber ich denk es geht ja letztendlich mehr als 2 Personen an.

Das hab ich grad in Perl gebastelt, das tut soweit ganz gut. Den Nachteil dens noch hat ist, dass es HTML-Tags kaputtmacht, wenn man sowas <img src="test>"> macht, weil er den test> als Tag-abschluss sieht. Sollt aber eigentlich eh nicht vorkommen.

# hier mal als Beispiel fuer die Config
my %tags =
(
a => { href => 1, target => 1 },
p => { align => 1, valign => 1},
img => { src => 1, width => 1, height => 1 },
div => { class => 1 },
);

sub subst_helper
{
my $tag = shift(@_); # der komplette Tag
$tag = substr($tag, 1, -1); # ohne < und >

my ($tagname, $attrib_tmp) = split(/\s+/, $tag, 2);
$tagname = lc $tagname;

if (substr($tagname, 0, 1) eq '/') # schliessen tag
{
return '' unless exists $tags{substr($tagname, 1)}; # substr wegen /
return "<$tagname>";
}
else # oeffnen tag
{
return '' unless exists $tags{$tagname};

my $returntag = "<$tagname";

while (length $attrib_tmp) # die einzelnen Attribute wegschnipseln
{
my $key;
($key, $attrib_tmp) = split(/\s*=\s*/, $attrib_tmp, 2); # der Attributname ist alles bis zum =

my $value;
if (substr($attrib_tmp, 0, 1) eq "'") # wenn value in ' steht
{
$attrib_tmp = substr($attrib_tmp, 1);
($value, $attrib_tmp) = split(/'\s*/, $attrib_tmp, 2);
}
elsif (substr($attrib_tmp, 0, 1) eq '"') # wenn value in " steht
{
$attrib_tmp = substr($attrib_tmp, 1);
($value, $attrib_tmp) = split(/"\s*/, $attrib_tmp, 2);
}
else # wenn der valuestring ohne Anfuehrungszeichen dasteht geht er bis zum naechsten space
{
($value, $attrib_tmp) = split(/\s+/, $attrib_tmp, 2);
}

$returntag .= " $key=\"$value\"" if ($tags{$tagname}{$key});
}

$returntag .= '>';
return $returntag;
}
}

$html =~ s/(<.+?>/subst_helper($1)/ge;

[UPDATE]
Wenns wer braucht, um das in PHP umzuschreiben oder so kann ichs auch per Mail und richtig formatiert schicken.


[Editiert am 15/9/2006 von DinA5]



Beiträge: 2144
Registriert: 6.8.2003
Status: Offline
  erstellt am: 15.9.2006 um 14:53 Uhr:
Kein Wunder das ich mit meinem hohen Alter immer Kopfschmerzen vor dem PC kriege

Viel Spaß beim weiterbasteln......... wenns fertig ist will ich das dann aber auch haben.
Wird der Roady dadurch schneller......, tiefer....., breiter oder gar noch Sicherer

Naja wenns soweit ist wirds SAM schon verraten
 
____________________
s>



Beiträge: 295
Registriert: 12.8.2005
Status: Offline
erstellt am: 15.9.2006 um 15:27 Uhr:
> Kein Wunder das ich mit meinem hohen Alter immer Kopfschmerzen vor dem PC kriege

Also soooo schlecht programmier ich nun auch wieder nicht ;-)

Und ob der Roady schneller wird muss man noch testen.



Beiträge: 49
Registriert: 6.5.2005
Status: Offline
erstellt am: 15.9.2006 um 16:07 Uhr:
joar scheint zu funzen, auch wenn man durch die eingabe von " immernoch aus dem zugewiesenen kasten ausbrechen kann

[Editiert am 15/9/2006 von HSINC]


Hosted @ Falkenseer.NET
0.3074620 - 20 queries