Portal > Foren > PHP > PHP-Programmierung > Sicherheit der Passworteingabe und md5()
Antwort
 
Themen-Optionen
Alt 02.05.2006, 22:10 Nach oben    #21
Benutzer
 
Registriert seit: 31.12.2005
Beiträge: 90
Standard

So, nun schalte ich mich auch mal ein

Ich habe eine Userverwaltungsklasse. Darin kommt natürlich häufig (bei den ganzen Abfragen und so) md5() vor. Sollte ich das eventuell durch

myPwd()

ersetzten, sodass ich später die Passwortfunktion selbst ändern kann und das nur einmal in myPwd() machen muss.

Also solange ich md5() verwende, einfach alle md5()'s durch myPwd() ersetzten, und myPwd so definieren:

PHP-Code:
function myPwd($str)
{
  return 
md5($str);

später kann ich das immernoch durch sha1() ersetztzen oder sogar crypt() einsetzten.


Und ja, wenn man mal logisch denkt, ist das, was Waq gesagt hat, richtig:
md5(md5($var)) ist unsicherer als md5($var);

stellt euch folgendes vor:
PHP-Code:
$str '876%/79 =ß *# *987 )(/ Klk asl ) as as asd2 34r d';
echo 
md5($str);
echo 
md5(md5($str)); 
nun, wenn man nun md5($str) verwendet, dann muss der BrutoForcer also "876%/79 =ß *# *987 )(/ Klk asl ) as as asd2 34r d" erraten / generieren ... da kann er lange scannen. Aber wenn man md5(md5($str)) verwendet, dann muss der BrutoForcer ja nur noch das erraten, was md5($str) zurückgibt. Und md5($str) ist ja ein kürzerer String, der noch dazu aus einfacheren Zeichen besteht (also [a-z0-9] und so) ...

edit: http://www.sitepoint.com/forums/show...ybrid&t=213723 recht interessant

Geändert von björn (02.05.2006 um 22:13 Uhr).
björn ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.05.2006, 22:17 Nach oben    #22
me pro ok?
 
Benutzerbild von Lars
 
Registriert seit: 07.09.2005
Ort: Pulheim bei Köln
Beiträge: 964
Standard

Zitat:
Und md5($str) ist ja ein kürzerer String, der noch dazu aus einfacheren Zeichen besteht (also [a-z0-9] und so)
Und genau das ist der Punkt, der bei allen Hash-Algorithmen und Einwegverschlüsselungen zu Kollisionen führt.
__________________
Gedanken aus Draht stricken einen Zaun.
Lars ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 02.05.2006, 22:49 Nach oben    #23
Johannes Müller
 
Benutzerbild von $traight-$hoota
 
Registriert seit: 15.09.2005
Ort: Königreich Flieden
Beiträge: 521
Standard

Zitat:
Zitat von björn
sodass ich später die Passwortfunktion selbst ändern kann und das nur einmal in myPwd() machen muss.
[...]
später kann ich das immernoch durch sha1() ersetztzen oder sogar crypt() einsetzten.
dann kannst du aber auch allen usern neue passwörter zuschicken, weil die db-hashes ja nicht mehr stimmen.
__________________
Weißt Bescheid - Scheiß wie weit
$traight-$hoota ist gerade online  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.05.2006, 00:08 Nach oben    #24
Waq
Erfahrener Benutzer
 
Registriert seit: 18.08.2005
Beiträge: 108
Standard

Zitat:
Zitat von Fat Tony
d.h. läuft eine Anwendung zu erst auf einem Windows Server und zieht zB auf einen Linux um so sind alle Passwörter "fürn arsch".
Weniger. md5-crypt sollte auf jedem Linux und BSD der letzten Jahre verfügbar sein.
Auf exotischeren Unices (Solaris, AIX...) mag das anders sein, mit denen kenne ich mich nicht aus.
Und auf Windows bringt PHP die crypt-Funktionalität schon recht lange selbst mit, und da sollte md5-crypt dabei sein, vielleicht muss man es über einen entsprechenden Salt statt des Standards auswählen.

Zitat:
Zitat von Fat Tony
Außerdem verwendet crypt nur die ersten 8 Buchstaben.
Das ist nur das olle DES-Crypt aus der Unix-Steinzeit... 2 Zeichen Salt und max. 8 Zeichen Passwort. md5-crypt hat diese Beschränkung nicht.

Zitat:
Zitat von Fat Tony
Meiner Meinung am sichersten:
Mit md5 verschlüsseln und einen SALT verwenden.
Kann man machen... natürlich mit sha1 statt md5.
Ob das jetzt sicherer oder unsicherer als md5-crypt oder blowfish ist kann ich nicht beurteilen.
Waq ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 03.05.2006, 07:17 Nach oben    #25
Benutzer
 
Registriert seit: 31.12.2005
Beiträge: 90
Standard

Zitat:
Zitat von Lars
Zitat:
Und md5($str) ist ja ein kürzerer String, der noch dazu aus einfacheren Zeichen besteht (also [a-z0-9] und so)
Und genau das ist der Punkt, der bei allen Hash-Algorithmen und Einwegverschlüsselungen zu Kollisionen führt.
?

Zitat:
Zitat von $traight-$hoota
Zitat:
Zitat von björn
sodass ich später die Passwortfunktion selbst ändern kann und das nur einmal in myPwd() machen muss.
[...]
später kann ich das immernoch durch sha1() ersetztzen oder sogar crypt() einsetzten.
dann kannst du aber auch allen usern neue passwörter zuschicken, weil die db-hashes ja nicht mehr stimmen.
ja, ich meinte ja nur, dass man dann, sofern man das Script auf einem anderen Server aufsetzt, dort anfangs noch die Verschlüsslung bestimmen kann (z.B. wenn die aktuelle nicht unterstützt ist oder nicht erwünscht ist). auf jeden fall ist man mal flexibler!!
björn ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.05.2006, 13:13 Nach oben    #26
Benutzer
 
Benutzerbild von niklasboelter
 
Registriert seit: 22.01.2006
Beiträge: 31
Standard

Zitat:
Zitat von björn
Aber wenn man md5(md5($str)) verwendet, dann muss der BrutoForcer ja nur noch das erraten, was md5($str) zurückgibt. Und md5($str) ist ja ein kürzerer String, der noch dazu aus einfacheren Zeichen besteht (also [a-z0-9] und so) ...
Programmablauf:
1)Der "Bruteforcer" gibt eine Passwort möglichkeit die md5($str) entspricht
2)Das Programm wendet 2x md5() auf die gehashte passwort an um zu gucken ob es stimmt
3)Der Key der Herauskommt ist natürlich ein komplett anderer. [ md5(md5($str)) != md5(md5(md5($str))) ]

Der angreifer muss trotzdem das komplexe Passwort [oder eine Kollision davon] herausfinden, für md5(md5()) gibt es vermutlich keine rainbow tables fazit: md5(md5()) ist viel sicherer. viele Forensysteme benutzen doppeltes md5() mit jeweils einem salt - das knackt so schnell niemand ps: wo ist md5() eine Leiche? wer es einfach nur so einsetzt ist halt selber schuld ; )
__________________
PHP-Code:
$x[] =& $x;
$x == $x

Geändert von niklasboelter (06.05.2006 um 13:17 Uhr).
niklasboelter ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.05.2006, 13:35 Nach oben    #27
Jann Hendrik Bekaan
 
Benutzerbild von Jann Hendrik
 
Registriert seit: 02.12.2004
Ort: Wildeshausen
Beiträge: 2.213
Standard

Zitat:
Zitat von niklasboelter
viele Forensysteme benutzen doppeltes md5()
Als das da wären?
__________________

Umfragen:
bitte beachten: Vorschläge für künftige Umfragen
Woher weißt du vom developers-guide?

Wenn du dich in ein interessantes Thema eingearbeitet hast, dann lass andere daran teilhaben! Schreibe ein Tutorial und beschreibe, wie es geht, was nicht klappt, wo man aufpassen muss usw.
Danke!
Jann Hendrik ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.05.2006, 13:35 Nach oben    #28
Christian Mühlroth
 
Benutzerbild von Chr!s
 
Registriert seit: 04.09.2005
Ort: Nürnberg
Beiträge: 561
Standard

Zitat:
Programmablauf:
1)Der "Bruteforcer" gibt eine Passwort möglichkeit die md5($str) entspricht
2)Das Programm wendet 2x md5() auf die gehashte passwort an um zu gucken ob es stimmt
3)Der Key der Herauskommt ist natürlich ein komplett anderer. [ md5(md5($str)) != md5(md5(md5($str))) ]

Der angreifer muss trotzdem das komplexe Passwort [oder eine Kollision davon] herausfinden, für md5(md5()) gibt es vermutlich keine rainbow tables fazit: md5(md5()) ist viel sicherer. viele Forensysteme benutzen doppeltes md5() mit jeweils einem salt - das knackt so schnell niemand ps: wo ist md5() eine Leiche? wer es einfach nur so einsetzt ist halt selber schuld ; )
Genau diesen Gedankengang bin ich auch gegangen.
verschachtelte MD5s mit einem Salt können nicht so schnell geknackt werden, wie auch? Woher will der angreifer wissen, wie oft er (das ja quasi transparent, da er an die Verschlüsselten Passwörter ja nicht wirklch rankommt) de-md5en muss? Weiß er nicht. Bei öffentlichen Scripten kann er diese zwar runterladen und ansehen, aber dennoch.
__________________
http://www.ChrisDiary.De
Chr!s ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.05.2006, 13:37 Nach oben    #29
Jay
Gast
 
Beiträge: n/a
Standard

Zitat:
Programmablauf:
1)Der "Bruteforcer" gibt eine Passwort möglichkeit die md5($str) entspricht
2)Das Programm wendet 2x md5() auf die gehashte passwort an um zu gucken ob es stimmt
3)Der Key der Herauskommt ist natürlich ein komplett anderer. [ md5(md5($str)) != md5(md5(md5($str))) ]

Der angreifer muss trotzdem das komplexe Passwort [oder eine Kollision davon] herausfinden, für md5(md5()) gibt es vermutlich keine rainbow tables fazit: md5(md5()) ist viel sicherer. viele Forensysteme benutzen doppeltes md5() mit jeweils einem salt - das knackt so schnell niemand ps: wo ist md5() eine Leiche? wer es einfach nur so einsetzt ist halt selber schuld ; )
bei einer bruteforece attacke werden keine hashes ausprobiert sondern stink normale mögliche passwörter.
d.h. md5(md5()) = md5(md5())

wenn man aber salts einsetzt ist das nicht der fall, weil

md5(md5()) <> md5 ($salt.md5().$salt)

MfG Fat Tony
 
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.05.2006, 13:49 Nach oben    #30
Waq
Erfahrener Benutzer
 
Registriert seit: 18.08.2005
Beiträge: 108
Standard

Zitat:
Zitat von niklasboelter
Der angreifer muss trotzdem das komplexe Passwort [oder eine Kollision davon] herausfinden,
Nein, eine Kollision der Kollision geht werden des doppelten md5() auch.

Zitat:
Zitat von niklasboelter
für md5(md5()) gibt es vermutlich keine rainbow tables
Das ist aber auch der einzige Vorteil, und von jedem mit etwas Ahnung, ein oder zwei leeren Festplatten und einer Woche Zeit zu ändern. Auf einen Vorteil, der mich vor dummen Script-Kiddies oder eine Woche lang schützt würde ich nicht viel geben.

Durch ein zweites md5 kann sich die Anzahl der Kollisionen nicht verringern, nur erhöhen, und ich habe meine arge Zweifel, dass md5 auf der Menge der 32-stelligen hexadezimalzahlen einen Isomorphismus darstellt, das wäre der einzige Fall, in dem md5 die Anzahl der Kollisionen nicht erhöht.
Und kryptoanalytisch sollte die Vermehrung der Kollisionen das brute-forcing vereinfachen.
Einem Hacker mit Ahnung macht man die Sache durch doppeltes md5() also einfacher.

Das ist wahrlich nicht meine Vorstellung von "viel sicherer".

Zitat:
Zitat von niklasboelter
viele Forensysteme benutzen doppeltes md5() mit jeweils einem salt - das knackt so schnell niemand
Aber nur wegen des Salts.
Ich würde mich nicht darauf verlassen, was Horden von PHP-Programmierern machen... wenn man sich danach richten würde, hätten wir immer noch standardmässig register_globals...

Zitat:
Zitat von niklasboelter
ps: wo ist md5() eine Leiche? wer es einfach nur so einsetzt ist halt selber schuld ; )
md5 ist seit sha1 eine Leiche.
Der einzige Grund, warum dieser Zombie noch rumläuft sind die ganzen Totenbeschwörer, weswegen ich strikt dagegen bin, md5 in irgendeiner Weise öffentlich zu verteidigen.
Waq ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.05.2006, 13:54 Nach oben    #31
Waq
Erfahrener Benutzer
 
Registriert seit: 18.08.2005
Beiträge: 108
Standard

Zitat:
Zitat von Chr!s
Woher will der angreifer wissen, wie oft er (das ja quasi transparent, da er an die Verschlüsselten Passwörter ja nicht wirklch rankommt) de-md5en muss? Weiß er nicht.
Die Passwort-Knackerei fängt dann an, wenn der Hacker an die Verschlüsselten Passwörter gekommen ist.
Davon auszugehen, dass der Hacker an die Datenbank kommt aber nicht an den PHP-Quellcode halte ich für... fahrlässig.
"gehe davon aus, dass der Angreifer dumm ist"
Sowas hat bei Sicherheitsüberlegungen nichts zu suchen.
Waq ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 06.05.2006, 13:56 Nach oben    #32
Benutzer
 
Benutzerbild von niklasboelter
 
Registriert seit: 22.01.2006
Beiträge: 31
Standard

Zitat:
Zitat von Jann Hendrik
Zitat:
Zitat von niklasboelter
viele Forensysteme benutzen doppeltes md5()
Als das da wären?
vBulletin , invision power board und yaBB SE (alle mit salt) [ich habe aber nicht die allerneuesten versionen] SMF hat sehr viele verschiedene algorhythmen [auch die von vBulletin und Invision] hier mal auszug aus smf LogInOut.php wenn das default verfahren von smf nicht klappt: ( sha1() mit salt)
PHP-Code:
        if ($user_settings['passwd'] != $sha_passwd)
        {
                
// Maybe we were too hasty... let's try some other authentication methods.
                
$other_passwords = array();

                
// None of the below cases will be used most of the time (because the salt is normally set.)
                
if ($user_settings['passwordSalt'] == '')
                {
                        
// YaBB SE, Discus, MD5 (used a lot), SHA-1 (used some), SMF 1.0.x, IkonBoard, and none at all.
                        
$other_passwords[] = crypt($_REQUEST['passwrd'], substr($_REQUEST['passwrd'], 02));
                        
$other_passwords[] = crypt($_REQUEST['passwrd'], substr($user_settings['passwd'], 02));
                        
$other_passwords[] = md5($_REQUEST['passwrd']);
                        
$other_passwords[] = sha1($_REQUEST['passwrd']);
                        
$other_passwords[] = md5_hmac($_REQUEST['passwrd'], strtolower($user_settings['memberName']));
                        
$other_passwords[] = md5($_REQUEST['passwrd'] . strtolower($user_settings['memberName']));
                        
$other_passwords[] = $_REQUEST['passwrd'];

                        
// This one is a strange one... MyPHP, crypt() on the MD5 hash.
                        
$other_passwords[] = crypt(md5($_REQUEST['passwrd']), md5($_REQUEST['passwrd']));

                        
// Snitz style - SHA-256.  Technically, this is a downgrade, but most PHP configurations don't support sha256 anyway.
                        
if (strlen($user_settings['passwd']) == 64 && function_exists('mhash') && defined('MHASH_SHA256'))
                                
$other_passwords[] = bin2hex(mhash(MHASH_SHA256$_REQUEST['passwrd']));
                }
                
// The hash should be 40 if it's SHA-1, so we're safe with more here too.
                
elseif (strlen($user_settings['passwd']) == 32)
                {
                        
// vBulletin 3 style hashing?  Let's welcome them with open arms \o/.
                        
$other_passwords[] = md5(md5($_REQUEST['passwrd']) . $user_settings['passwordSalt']);
                        
// Hmm.. p'raps it's Invision 2 style?
                        
$other_passwords[] = md5(md5($user_settings['passwordSalt']) . md5($_REQUEST['passwrd']));
                } 
schön viele methoden ; ) phpBB das unglückliche entchen kommt natürlich mit einfachem md5() daher
__________________
PHP-Code:
$x[] =& $x;
$x == $x

Geändert von niklasboelter (06.05.2006 um 14:05 Uhr).
niklasboelter ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.05.2006, 09:15 Nach oben    #33
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard

Kann man nicht hingehen und einige Methoden zusammenmachen und dann verketten und dann halt varchar auf 100 erhöhen?
PHP-Code:
$hash md5($pass.$salt).md5($pass); 
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.05.2006, 09:18 Nach oben    #34
Benutzer
 
Benutzerbild von niklasboelter
 
Registriert seit: 22.01.2006
Beiträge: 31
Standard

wenn du mir verrätst warum du fuer 64 zeichen ne feldlänge von 100 brauchst gerne
__________________
PHP-Code:
$x[] =& $x;
$x == $x
niklasboelter ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.05.2006, 15:43 Nach oben    #35
Waq
Erfahrener Benutzer
 
Registriert seit: 18.08.2005
Beiträge: 108
Standard

Zitat:
Zitat von ex³
Kann man nicht hingehen und einige Methoden zusammenmachen und dann verketten und dann halt varchar auf 100 erhöhen?
PHP-Code:
$hash md5($pass.$salt).md5($pass); 
Und was sollte das bringen?
Waq ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 07.05.2006, 17:10 Nach oben    #36
Benutzer
 
Benutzerbild von niklasboelter
 
Registriert seit: 22.01.2006
Beiträge: 31
Standard

Na ist doch offensichtlich: es bringt gar nichts aber man verbraucht doppelt so viel speicher und CPU last!

warum nicht die Wirtschaft etwas ankurbeln? den hardware herstellern gehts doch sowieso schlecht.

[wer ironie findet...]
__________________
PHP-Code:
$x[] =& $x;
$x == $x

Geändert von niklasboelter (07.05.2006 um 17:12 Uhr).
niklasboelter ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.05.2006, 10:16 Nach oben    #37
Erfahrener Benutzer
 
Registriert seit: 30.10.2005
Beiträge: 279
Standard

Dachte mir halt wenn man zwei Hashs aneinander hängt, hat man die doppelte Länge und zig mehr Kombinationen...wird das dann nicht sicherer? Dauert doch um einiges länger einen doppelt so langen String zu knacken.

Also ich will nicht md5() auf den Kram nochmal anwenden nur eben einen verketteten String speichern.

Oder hat jemand ne andere Idee wie man auf nem shared hoster mit sha1 oder md5 ne überaus guten php Schutz hinkriegt?

Geändert von ex³ (08.05.2006 um 10:19 Uhr).
ex³ ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.05.2006, 12:07 Nach oben    #38
Martin Breuer
 
Benutzerbild von WarrenFaith
 
Registriert seit: 17.08.2005
Ort: Berlin
Beiträge: 1.642
Standard

soweit ich verstanden habe, ist doch sha1 schon sicher oder nicht?
__________________
I did it my way - Senseless-Blog
WarrenFaith ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.05.2006, 15:28 Nach oben    #39
Benjamin Steininger
 
Benutzerbild von robo47
 
Registriert seit: 02.06.2005
Ort: weiher im tiefsten Odenwald
Beiträge: 1.180
Standard

Zitat:
Zitat von WarrenFaith
soweit ich verstanden habe, ist doch sha1 schon sicher oder nicht?
sicher ist immer relativ, auch für sha-1 gabs wenn ich mich richtig erinne bei heise.de nen eintrag, dass man es auf irgendeine art schneller als rein auf brute-force lösen kann (glaub die potenz der anzahl der gebrauchten versuche ist um 2 oder 3 gesenkt worden .... ), aber alles spekulation.

mfg
robo47
robo47 ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Alt 08.05.2006, 16:18 Nach oben    #40
Benutzer
 
Benutzerbild von niklasboelter
 
Registriert seit: 22.01.2006
Beiträge: 31
Standard

Zitat:
Zitat von ex³
Dachte mir halt wenn man zwei Hashs aneinander hängt, hat man die doppelte Länge und zig mehr Kombinationen...wird das dann nicht sicherer? Dauert doch um einiges länger einen doppelt so langen String zu knacken.

Also ich will nicht md5() auf den Kram nochmal anwenden nur eben einen verketteten String speichern.

Oder hat jemand ne andere Idee wie man auf nem shared hoster mit sha1 oder md5 ne überaus guten php Schutz hinkriegt?
Du schneidest die letzte hälft vom string ab und knackst die ganz normale md5 verschlüsselung. wo ist die Sicherheit? es ist zumindestens theoretisch noch unsicherer als normales md5()

@WarrenFaith: benutz es auf jedenfall mit einem salt, dann ist es "sicher"
__________________
PHP-Code:
$x[] =& $x;
$x == $x
niklasboelter ist offline  
Add Post to del.icio.usBookmark Post in TechnoratiDiesen Beitrag zu Mister Wong hinzufügen!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.