Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

Sanitize user input

Diskussion: Sanitize user input im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige Hoi, mich würde intressieren wie ihr mit User-Input auf Webpages umgeht. Zu einem intressiert mich wann ihr User-Daten auf ...

Antwort
Alt 21.12.10, 21:01   #1 (permalink)
 
Registriert seit: 05.10.05
Inliferty Leistung: 8086
Inliferty eine Nachricht über ICQ schicken
Likes: 5
Question Sanitize user input

Anzeige

Hoi,

mich würde intressieren wie ihr mit User-Input auf Webpages umgeht.

Zu einem intressiert mich wann ihr User-Daten auf ihre Richtigkeit überprüft.
Also beim einem Formular zb. beim Absenden oder schon direkt bei der Eingabe via JavaScript/AJAX? (Ob ein Username schon benutzt ist, die E-Mail Addresse ein valides Format hat, ...)

Was mich auch noch intressieren würde, wäre wie ihr mit Sonderzeichen in User-Inputs umgeht (speziell "<" und ">") in Bezug auf XSS.
Wandelt ihr diese direkt um und speichert dann die schon gesicherten Werte in der Datenbank, oder lässt ihr die Daten direkt so in die Datenbank und überprüft erst bei der Ausgabe die Daten und ersetzt wenn nötig die HTML-Tags?

[Ein Grund, warum ihr es so macht und nicht andersrum wäre auch nett]

MfG
Inliferty

Inliferty ist offline   Mit Zitat antworten
Alt 21.12.10, 21:18   #2 (permalink)
 
Registriert seit: 13.05.07
Enterprize1 Leistung: Facit NTK
Likes: 0
Standard

Hi,

bei einem Formular mache ich üblicherweise beides. Das Überprüfen auf dem Server ist ein muss und das per JS dann die Kür Der sollte ja möglichst nicht mehrmals ein Forumlar abschicken um eventuelle Fehler bei der Eingabe zu verbessern, sondern nur einmal. (Ausnahme Captchas und dergleichen)


Sonderzeichen ersetze ich vor dem Eintragen in die Datenbank, da dies zum einen einfacher ist. Es gibt meist mehr Ausgabemöglichkeiten als Eingabemöglichkeiten->Aufwand sinkt und man muss nur einmal daran denken die Sonderzeichen zu ersetzen. Außerdem kann ich das Ersetzen zum Beispiel in Adminpanels ausschalten, um mehr Einstellmöglichkeiten zu haben. Um schnell mal was zu testen müsste man ansonsten alle Ausgaben abändern und die Arbeit will ich mir für einen kurzen Test nicht machen

--
Enterprize1
Enterprize1 ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 21.12.10, 22:03   #3 (permalink)
Themenstarter
 
Registriert seit: 05.10.05
Inliferty Leistung: 8086
Inliferty eine Nachricht über ICQ schicken
Likes: 5
Standard

Also Danke für dein Kommentar und wenn ich das richtig sehe mache ich es schon fast richtig.
Nur für die Überprüfung vor dem Absenden von Formularen war ich noch zu faul (Aber steht schon auf der ToDo)

MfG
Inliferty
Inliferty ist offline   Mit Zitat antworten
Alt 21.12.10, 22:04   #4 (permalink)
 
Benutzerbild von metax.
 
Registriert seit: 22.01.07
metax. Leistung: 8086
metax. eine Nachricht über ICQ schicken
Likes: 10
Standard

Den Plausibilitätscheck auf Clientseite spare ich mir meistens. Bei größeren (und nichttrivialen) Formularen wäre es aber vermutlich ganz sinnvoll.
Auf der Serverseite druchlaufen die Eingaben normalerweise eine Kaskade von Validatoren und werden solange an die Eingabemaske zurückgeschickt, bis sie alle Tests bestehen (überlicherweise: Felder dürfen nicht leer sein / müssen einer Regex entsprechen / müssen eine Zahl sein / eine ID oder ein Identiefier muss existieren usw.)
Das Escaping passiert bei mir immer nur bei der Ausgabe. Im Controller und in der Datenbank liegen die Eingaben normalerweise immer als beliebiger UTF8-String vor.
Ich habe für Userinput verschiedene Escaping-Stufen, die von der Art des Feldes abhängt.
Manche Felder müssen Integer (oder andere Zahlen) in einem Bestimmten Format und einem bestimmten Bereich sein. Durch Validatoren und das entsprechende Datenformat in der Datenbank stelle ich sicher, dass da nie was durchkommt, was bei der Ausgabe escapt werden muss.
Andere Felder (z.B. E-Mail Adresse oder Benutzername) werden als Plaintext gehandhabt und bei der Ausgabe auch zu Plaintext escapt. Es werden einfach alle <,>,&," umgewandelt und das Ergebnis ist ein Plaintext ohne Tags.
Dann gibt es noch die dritte Stufe. Das sind Kommentarfelder oder sonstige Volltexteingaben mit "magischen" Elemente. Es wird eine BBCode-ähnliche Transformaiton durchgeführt, die auch von Benutzer eigene HTML-Tags entfernt (nur eigens zugelassene Tags können durch sowas wie "[ b ]Bold[ /b ]" erzeugt werden).

mfg, metax.

edit:
Nachtrag: Ich habe hier noch einen Artikel gefunden, in dem gezeigt wird, wie man manche Browser dazu bringen kann, eine ungefährliche Benutzereingabe doch zu parsen, indem man Base64-kodierte Tags verwendet und dem Browser vermittelt, es würde das UTF7-Charset gelten: https://code.google.com/p/doctype/wiki/ArticleUtf7
Man sollte also immer seinen Zeichensatz im HTTP-Header und am besten auch noch im HTML korrekt festlegen.
__________________
Wenn keiner zuschaut, teile ich heimlich durch Null!
Meine Homepage: Planet Metax | meine Bilder: DeviantArt | Twitter

Geändert von metax. (22.12.10 um 17:02 Uhr)
metax. ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » Sanitize user input
Themen-Optionen
Ansicht

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

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus



1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61