art-d-sign
-


Hinweise


Antwort
 
LinkBack Themen-Optionen Thema durchsuchen Bewertung: Bewertung: 2 Stimmen, 5,00 durchschnittlich.
Alt 03.03.2008, 16:25   #1
TP-Moderator
 
Benutzerbild von Rizzo
 
Registriert seit: Aug 2004
Ort: Kaiserslautern
Rizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine User

Klasse zum validieren von Formular-Benutzereingaben


Tach Dynamiker,

im Laufe der Zeit sammelt sich wohl jeder so einiges an Schnipsel zusammen, die man dann als Funktionen in seinen Projekten benutzt. Was man quasi bei jedem PHP-Projekt braucht ist eine Möglichkeit Benutzereingaben in Formularen zu validieren, um sich vor böswilligen Attacken zu schützen.

Aus diesem Grund habe ich mal meine eigene Validator Klasse zusammen gestellt, weil das bequemer ist als sich mit etlichen losen Funktionen herumzuplagen. Da ich mir dachte das einige von Euch sowas auch brauchen können, stelle ich die Klasse hier zur Verfügung.

Hier mal eine kurze Anwendungsbeispiel-Übersicht für die Klasse...

PHP-Code:
<?php

// Klasse einbinden
include( 'validator.class.php' );

// Validator Objekt erzeugen
$formular = new Validator();

/* --------------------------- */
/* --- Anwendungsbeispiele --- */
/* --------------------------- */

/**
 * Zahlen - nur Ziffern werden als gültig erkannt
 *
 * Parameter: Wert, Feld-Bezeichnung
 */
$zahl 123456789;
$formular->pruefeZahl$zahl'Zahl' );


/**
 * Postleitzahl - nur 5-stellige Zahlen werden als gültig erkannt
 * 12345 = true
 * 93746 = true
 * 45x98 = false
 * 123.4 = false
 *
 * Parameter: Wert, Feld-Bezeichnung
 */
$plz 12345;
$formular->pruefePLZ$plz'PLZ' );


/**
 * Datum - nur ein gültiges Datum im deutschen Format wird als gültig erkannt
 * 15.7.2004  = true ( Trennzeichen = . )
 * 15-7-2004  = true ( Trennzeichen = - )
 * 15/7/2004  = true ( Trennzeichen = / )
 * 29.02.2008 = true
 * 29.02.2007 = false
 * 31.11.2008 = false
 * 24 12 2008 = false
 *
 * Parameter: Wert, Feld-Bezeichnung, Trennzeichen
 */
$datum '24.12.2008';
$formular->pruefeDatum$datum'Datum''.' );


/**
 * Telefonnummer - Zahlen mit Telefonnummer-Struktur werden als gültig erkannt
 * 0123 45678    = true
 * +49 123 45678 = true
 * (0) 123 45678 = true
 * 0123 45 678   = true
 * 0123 / 45678  = true
 *
 * Parameter: Wert, Feld-Bezeichnung
 */
$telefonnummer '0123 / 45678';
$formular->pruefeTelefon$telefonnummer'Telefonnummer' );


/**
 * Geldbetrag - Nur Geldbetrag-Strukturen werden als gültig erkannt
 * 399          = true
 * 399,49       = true
 * 1.399,00     = true
 * 1.000.000    = true
 * 1.234.567,89 = true
 * 399,499      = false
 * 23.45,99     = false
 * 0399         = false
 *
 * Parameter: Wert, Feld-Bezeichnung
 */
$geldbetrag '1.234.567,89';
$formular->pruefeGeldbetrag$geldbetrag'Geldbetrag' );


/**
 * Wort - nur einzelne Wörter bestehend aus Buchstaben werden als gültig erkannt
 * Baumhaus     = true
 * Karl-Heinz   = false
 * Route66      = false
 * Schreibtisch = false (FALSE wenn Maximallänge z.B. 10 Zeichen beträgt)
 * CSS          = false (FALSE wenn Mindestlänge z.B. 5 Zeichen beträgt)
 *
 * Parameter: Wert, Feld-Bezeichnung, Mindestlänge, Maximallänge
 * Mindestlänge und Maximallänge haben als Default 999 und wird daher ignoriert
 */
$wort 'Audi';
$formular->pruefeWort$wort'Automarke'320 );


/**
 * Name - nur Wörter mit Namen-Struktur werden als gültig erkannt
 * Max Mustermann       = true
 * Prof. Max Mustermann = true
 * Mister O'Leary       = true
 * Karl-Heinz Schmitt   = true
 * Fritz Fischer 3.     = false
 * Klaus Kleister       = false (FALSE wenn Maximallänge z.B. 10 Zeichen beträgt)
 * Kalle                = false (FALSE wenn Mindestlänge z.B. 7 Zeichen beträgt)
 *
 * Parameter: Wert, Feld-Bezeichnung, Mindestlänge, Maximallänge
 * Mindestlänge und Maximallänge haben als Default 999 und wird daher ignoriert
 */
$name 'Prof. Dr. Max Mustermann';
$formular->pruefeName$name'Benutzername'550 );


/**
 * Text - normaler Text wird als gültig erkannt
 *
 * Parameter: Wert, Feld-Bezeichnung, Mindestlänge, Maximallänge
 * Mindestlänge und Maximallänge haben als Default 999 und wird daher ignoriert
 */
$text 'Hier steht belangloser Text der eeewig lang sein kann.';
$formular->pruefeText$text'Nachricht'151500 );


/**
 * Email-Adresse - Nur Email-Adressen werden als gültig erkannt
 *
 * Parameter: Wert, Feld-Bezeichnung
 */
$email 'jemand@irgendwo.de';
$formular->pruefeEmail$email'Email' );


/**
 * Web-Adresse - Nur Web-Adressen werden als gültig erkannt
 * http://www.domain.de    = true
 * www.domain.de           = true
 * https://www.domain.de   = true
 * http://domain.de        = true
 * www.domain.de/seite.htm = true
 *
 * Parameter: Wert, Feld-Bezeichnung
 */
$url 'http://www.eine-domain.de';
$formular->pruefeURL$url'URL' );



/**
 * Abfrage ob Fehler aufgetreten sind und diese ggfs. ausgeben.
 * getError() liefert ein Array zurück dessen Schlüssel den Feldnamen
 * entspricht, die man bei den Methoden-Aufrufen übergeben hat.
 * Der Wert enthält die Fehlermeldung, die in der Klasse gesetzt wurden.
 * Natürlich kann man auch statt $fehler eigene Meldungen ausgeben.
 */
if (count$formular->getError() ) > 0)
{
    foreach (
$formular->getError() as $feld => $fehler)
    {
        echo 
$feld': ' .$fehler"<br />\n";
    }
}

?>
Noch ein Hinweis:
Auf alle Werte die in die Klasse übergeben werden, wird eine allgemeine Routine ausgeführt. Die umfasst folgende Aktionen:
  • Stripslashes, wenn Magic Quotes auf dem Server aktiv ist
  • Trim um Leerzeichen vor und nach dem Wert zu entfernen
  • \r\n wird in \n umgewandelt
  • Mehr als 3 Zeilenumbrüche werden auf einen neuen Absatz reduziert. (verhindert sinnlose gestreckte Texte)
  • Mehr als 3 Leerzeichen werden auf 2 Leerzeichen reduziert (sinnlosen Whitespace braucht niemand)
  • Übertriebe Zeichen-Wiederholungen werden gekürzt. (z.B. 20 Ausrufungszeichen werden auf 1 Ausrufungszeichen reduziert)
  • Überlange Zeichenketten werden unterbrochen (verhindert das überlange Wörter das Layout sprengen)
  • Potentielle SQL Injections werden blockiert. Dabei wird bei jedem Wert geprüft ob sich ein möglicher SQL Befehl eingeschlichen hat (z.B. drop table oder insert into, etc.)
  • Potentielle Email Injections werden blockiert. Jeder Wert wird auf eventuelle Header Attacken geprüft. (ob z.B. bcc:, content-type:, etc. eingeschleust wurde)
  • Alle RegEx benutzen das normale Alphabet a-z, A-Z und Umlaute, sowie einige wenige Sonderzeichen und französische Akzentzeichen (es soll ja auch Leute geben die z.B. René heissen )

Die verwendeten Regulären Ausdrücke haben bisher gut funktioniert, auch wenn sie nicht allzu "scharf" sind. Wer Verbesserungsvorschläge hat oder einen Schnitzer entdeckt hat, immer her damit - am besten direkt mit einer Lösung/Verbesserung.

Viel Spaß beim validieren!
Angehängte Dateien
Dateityp: zip Validator_Klasse.zip (4,3 KB, 85x aufgerufen)
Rizzo ist gerade online   Mit Zitat antworten


Alt 29.05.2008, 13:18   #2
TP-Veteran
 
Registriert seit: May 2006
marc22 bringt sich richtig ein
Ich will ja nicht reinreden, aber wäre es nicht besser, für jede Validierung eine eigene Klasse zu schreiben, die ein Interface implementiert? Dann ist das ganze variabler und man muss nicht die Kernklasse anfassen.

Dann könnte man den eigentlichen Validator instanziieren und beliebig viele Regeln (ergo Klassen) hinzufügen. So in der Richtung:

PHP-Code:
$validator = new Validator();
$validator->addRule('...Regel 1...');
$validator->addRule('...Regel 2...');
$validator->addRule('...Regel 3...'); 
Die Regeln sind dann die Klassen, die in Dateien liegen, die genauso heißen wie die Klassen selber.


EDIT: Ich habe gerade gesehen, dass manuelito unten das etwa so gebaut hat, wie ich meinte..
__________________
...Meine Meinung

1984

Geändert von marc22 (29.05.2008 um 13:27 Uhr).
marc22 ist offline   Mit Zitat antworten
Alt 29.05.2008, 13:49   #3
TP-Moderator
 
Benutzerbild von Cybergreek
 
Registriert seit: Nov 2005
Ort: Köln
Cybergreek hilft, wo's gehtCybergreek hilft, wo's gehtCybergreek hilft, wo's geht
Ich will ja nicht reinreden, aber Danke!

Ich hab zwar da so meine eigenen Schnippsel, aber ich finde es Klasse von Dir, so etwas hier hinzustellen! Und da ich Dich nicht bewerten, weil ich erst ein paar andere bewerten, mache ich es auf diesem Weg
__________________
Grüße vom Griechen,
Cybergreek!

WikiDict.de - Das Wiki-Wörterbuch
Cybergreek ist offline   Mit Zitat antworten
Alt 29.05.2008, 15:27   #4
TP-Moderator
 
Benutzerbild von Rizzo
 
Registriert seit: Aug 2004
Ort: Kaiserslautern
Rizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine UserRizzo lebt für das TP und seine User
@ marc22
Jeder wie er mag; bekanntlich führen viele Wege nach Rom.
Für kleinere Projekte fange ich persönlich nicht großartig an mit Interfaces und etlichen Klassen zu hantieren, wenn ich alles was ich benötige gebündelt in einer Klasse haben kann.

@ Cybergreek
Rizzo ist gerade online   Mit Zitat antworten
Alt 29.05.2008, 15:45   #5
TP-Veteran
 
Registriert seit: May 2006
marc22 bringt sich richtig ein
Na klar. Ist mir nur vorhin so durch den Kopf gegangen, als ich mir das anschaute.
__________________
...Meine Meinung

1984
marc22 ist offline   Mit Zitat antworten
Antwort

  Aktuelles Thema
  TP Hilfe Forum > Web-Editoren & Coding > Traum-Dynamik > Traum-Scripts
Klasse zum validieren von Formular-Benutzereingaben [Snippet] Klasse zum validieren von Formular-Benutzereingaben
« image2html | Image Hosting Script für den Privatgebrauch »

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

Erweiterte Suche
Thema bewerten
Thema bewerten:

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.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an
Gehe zu


Alle Zeitangaben in WEZ +2. Es ist jetzt 13:32 Uhr.

Powered by: vBulletin Version 3.7 (Deutsch)
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd. / Search Engine Friendly URLs by vBSEO 3.2.0 ©2008, Crawlability, Inc.
Traum-Projekt.com | Suchen | Archiv | Impressum | Kontakt | | | Nach oben |



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 62 63 64 65 66 67

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 62 63 64 65 66 67