Hilfe bei Pattern

Alice

Erfahrenes Mitglied
Guten abend.

Kann mir jemand mit den "Pattern" helfen? Ich schaffe es einfach nicht alleine.

Ich möchte...
- Buchstaben A-Z, a-z und ß
- Umlaute Ä, Ö, Ü, ä, ö und ü
- Zahlen 0-9
- und folgende Zeichen . , : ; - ! " § $ % & / ( ) = ? ` @ €
- <br /> oder \n (also Enter)
... suchen.

Die oben genannten Zeichen sollen für ein Kontaktformular erlaubt sein.

Würde mich über Hilfe freuen... :)
 
Hallo.

Ich möchte das "Nachrichten-Feld" einfach absichern. HTML und PHP Code werden sowieso gefiltert. Ich möchte einfach kein unnötiges Risiko eingehen und deswegen diese Zeichen.

Übertreibe ich? Ist es nicht nötig zu prüfen, was der User (immer böse) eingibt?
 
Kannst du uns sagen, welches Risiko ein französisches é hat?
Oder 1*2*3 = 6 (der Stern ist bei dir nicht erlaubt)?
Nein? Dann könnte es übertrieben sein...
...
Natürlich ist es nötig, etwas zu prüfen. Und Whitelists haben je nach Fall schon auch ihren Sinn.
(Den Sinn des Eingabefelds kennen wir zwar nicht...)
Aber wenn es nur annähernd eine Freitexteingabe sein soll, bitte nicht.
Man vergisst immer irgendwas, was ein User doch gern eingegeben hätte.
 
Reichen denn "htmlspecialchars" und "strip_tags" als absicherung?

Bei dem Text handelt es sich um "Nachrichten" von Benutzern an mich, die in der Datenbank gespeichert werden.
 
Beim Einfügen Prepared Statements, beim Ausgeben htmlspecialchars mit den richtigen Parametern, sollte üblicherweise reichen ja. (Vorausgesetzt man ist auf UTF8 und mischt nicht irgendwelche Zeichensätze durcheinander)
 
Zeichensatz ist noch "ISO-8859-1". Ich wollte es umstellen auf UTF-8, bin aber noch nicht ganz durchgestiegen, wie es geht. (vBulletin!)

Also...

Beim "empfangen" des Textes mittels strip_tags und htmlspecialchars den Text filtern. Beim einlesen in die Datenbank per Prepared Statements absichern und bei der Ausgabe mit htmlspecialchars "maskieren"? Mehr nicht?

Paramter? So?

$var = htmlspecialchars($var, ENT_QUOTES);
 
vBulletin ... UTF8
Version 3.x oder 4.x (5.x weiß ich nicht genau), und es soll nicht alles komplett neu installiert/eingestellt/datenimportiert werden?

Sorry, das geht nicht gut. Vergiss es.

Für die "einfachste" Lösung wäre ein custom Build von PHP nötig. Hab das vor einger Zeit probiert, im Zuge eines DB-Software-Wechsels...

a) Zuerstmal alle Stellen finden, die umgestellt werden müssen. Ca. 30 einstellungsmäßig (andere Systeme kommen mit einer Einstellung aus), dazu natürlich noch die DB konvertieren. Lästig, aber einfach.

b) Weiße Seite. Bemerken, dass manche Codestellen im Core (und auch in Plugins, aber da kann VB nichts dafür) einfach nicht für Unicode gemacht sind. Ausbessern. Lästiger, aber geht ja noch.

c) Weiße Seite. Bemerken, dass manche DB-Einträge Datenblocke im PHP-Serialize-Format enthalten (haben diese :mad: Typen noch nie was von Normalisierung gehört)? Das Problem dabei ist, zu jedem String in so einem Block ist auch die Bytelänge mit abgespeichert. Wenn Umlaute etc. drin sind ist die mit UTF8 natürlich anders. Alte Bytelängenangaben aber neue Daten, unserialize() in PHP weigert sich und gibt nur false zurück.
Mögliche Lösung 1: Eben den PHP-Source holen, unserialize umprogrammieren (bevor false auch noch probieren ob die Länge zum alten Charset passte). Wollte ich nicht (müsste das bei jedem Sicherheitsupdate alles neu kompilieren usw.usw.), also:
Mögliche Lösung 2: Ein Programm schreiben dass mir einen DB-Dump nach diesem Serialize-Textformat durchsucht (dabei auch aufpassen, dass man wohl keine Sachen erwischt, die nur so ausschauen), und neue Bytelängen eintragen
An dem Punkt war ich "etwas" genervt, aber gut.

d) Merken, dass 40% der gefundenen Serializeblöcke Bytelängen haben, die auch für den alten Zeichensatz eigentlich ungültig sind. Im Code nachgeforscht ... Es wird nicht etwas der Inhalt einer DB-"Zelle" genommen und unserialisiert. Nein, wäre ja viel zu einfach. Es wird eine Zelle genommen, das } am Ende entfernt, der Inhalt einer anderen Zelle irgendwo aus einer anderen Tabelle dazugehängt, wieder ein } dazugemacht, und erst dann hat man den unserializierbaren Inhalt, für den die Längen gelten (die in einer Zelle allein gestanden sind). Und solche Situationen gibts mehrere Tausend mit Core-Code, natürlich immer andere beteiligte Tabellen für andere Spezialsituationen. (Das hat mir gereicht).
...
Die Seite ist noch immer auf ISO88591, aber sie wird in Kürze mit Xenforo ersetzt.
(btw., VB3 und VB4 haben keinen Support für PHP7 :p)

Was man bei einer Umstellung zu Xenforo dbmäßig aufpassen muss beschreib ich dir auch gerne :D

Beim "empfangen" des Textes mittels strip_tags und htmlspecialchars den Text filtern.
Vor dem Einfügen in die DB ist das eigentlich nicht nötig.
 
Zuletzt bearbeitet:
Boah... danke für den Text. :D Bin gerade im Büro und lese es mir heute abend in Ruhe durch.

Vor dem einfügen nicht "filtern" oder so? Ich habe es mir durch Tutorials so beigebracht JEDE EINGABE selbst wenn das Skript NICHTS speichert abzusichern. Unnötig?

PS: Vielleicht liegt es auch an unserer "heutigen Zeit", aber alle Foren (die ich kenne) haben seit der Umstellung von vBulletin auf XenForo spürbar an User/Themen/Beiträge abgenommen.

Ich habe es vor ein paar Monaten installiert und mag es einfach nicht. vBulletin möchte den PHP7 Support noch nachreichen für 3 und 4! Dann wird es das wohl auch gewesen sein...
 
vBulletin möchte den PHP7 Support noch nachreichen für 3 und 4!
...wobei sie sich selbst nicht sicher sind, ob sie das jemals fertig machen und veröffentlichen :p
Und es gibt ja auch noch Plugins, die zu 95% schon jahrelang nicht mehr gewartet werden...

Vielleicht liegt es auch an unserer "heutigen Zeit", aber alle Foren (die ich kenne) haben seit der Umstellung von vBulletin auf XenForo spürbar an User/Themen/Beiträge abgenommen.
Im offiziellen XF-Forum gibts auch einige Berichte über Foren, bei denen die Aktivität seit der Umstellung sehr gestiegen ist. Hängt von so vielen Faktoren ab...

Aber ja, viele Foren schwächeln in der heutigen Zeit leider.

Zum Thema:
Für die Datenbank machen <> usw. keinen Unterschied.
Und wenn sie mit htmlspecialchars umgewandelt werden muss man sie später auch evt. wieder rückwandeln.
 
Zurück