Sicherheit mit regulären Ausdrücken

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Sicherheit mit regulären Ausdrücken

    Hallo zusammen,
    ich habe mir mal eine kleine Funktion erstellt zur Überprüfung von Formularfeldern. Ich würde gerne mal einige Meinungen von euch hören, was ihr davon haltet. Insbesondere interessiert mich natürlich ob der Faktor Sicherheit für Scripte und Server gut gewährleistet ist oder ehr nicht.

    PHP-Code:
     // Formular-Daten-Prüfung mit regulären Ausdrücken
     
    function check $Typ$Name$Wert ){

       global 
    $hack;
       global 
    $check;

       
    //Spezielle Typen-Prüfung
       
    if( $Typ == || $Typ == || $Typ == || $Typ == ){
          
    // Prüfung ob Pflichtfelder nicht leer sind
          
    if( $Wert == "" ){
             
    $hack true
             
    $check[] = "Das Eingabefeld $Name ist eine Pflichtangabe.\n";}}

       if( 
    $Typ == ){
          
    // Drop-Down-Auswahl-Prüfung
          
    if( $Wert == || $Wert != 'on' ){
             
    $hack true
             
    $check[] = "Das Eingabefeld $Name ist eine Pflichtangabe.\n";}}

       if( 
    $Typ == && $Wert != "" ){
          
    // Datums-Prüfung
          
    if( !preg_match("'\b(((0?[1-9]|[12][0-9])\.(0?[1-9]|1[0-2])\.)|(30\.((0?
                           [13-9])|(1[0-2]))\.)|(31\.(0?[13578]|1[02])\.))(\d{2}|
                           (19|20)\d{2})\b'"
    $Wert) ){
             
    $hack true
             
    $check[] = "Das Eingabefeld $Name muss eine Datumsangabe in dem
                         Format DD.MM.YYYY sein.\n"
    ;}}

       if( 
    $Typ == && $Wert != "" ){
          
    // Nr.-Prüfung bei ICQ und MSN
          
    if( !preg_match("'((\d{3}-){2}(\d{3}))|((\d{3}){3})'"$Wert) ){
             
    $hack true
             
    $check[] = "Das Eingabefeld $Name darf nur aus Ziffern in dem
                         Format xxx-xxx-xxx oder xxxxxxxxx bestehen.\n"
    ;}}

       if( 
    $Typ == && $Wert != "" ){
          
    // E-Mail-Prüfung auf Gültigkeit
          
    if( !preg_match("'(.*?)\.(.*)@(.+)\.(.*)|(.*?)@(.+)\.(.*)'"$Wert) ){
             
    $hack true$check[] = "Das Eingabefeld $Name ist ungültig.\n";}}

       
    // Allgemeine Prüfungen
       
    if( $Typ != && $Wert != "" ){
          if( 
    preg_match("'(([F|f][O|o][R|r][M|m][A|a][T|t]\s*:\s*[a-zA-Z]{1})|
                        ([U|u][P|p][D|d][A|a][T|t][E|e])|([D|d][E|e][L|l][E|e][T|t][E|e])|
                        ([S|s][A|a][V|v][E|e])|([L|l][O|o][A|a][D|d])|
                        ([M|m][Y|y][S|s][Q|q])|([F|f]|[L|l][O|o][P|p][E|e][N|n])
                        |\/|\||\{|\}|\[|\]|<|>|:|';')'"
    $Wert)){
             
    $hack true
             
    $check[] = "Das Eingabefeld $Name darf keine Systembefehle, sowie 
                        diverse Sonderzeichen ('/, |, {, }, [, ], <, >, $, : und ;')
                        enthalten.\n"
    ;}}} 
    mfg Melchor

  • #2
    was hat formvalidierung mit sicherheit zu tun? sie hängt davon ab, was mit den daten anschließend geschieht. deine validierung ist geschmackssache - ich halte sie für unnötig. man kann sie sicherlich lockerer gestalten.

    Kommentar


    • #3
      Also die Daten werden anschließend in einer DB gespeichert. Dafür hatte ich mir gedacht das ich reguläre Ausdrücke nutze, um zu prüfen ob in einen der Eingabefelder versteckte Befehle vorhanden sind, die meine Scripte oder sogar den Server schaden konnten.

      Ok deiner Meinung nach ist das überflüssig, aber kannst du mir vielleicht mal ein Beispiel nennen, wie ich mich sonst vor sowas schützen kann? Bevor ich die Daten Speichere benutze ich auch htmlentities(). Sonst wüsste ich nicht was ich noch machen könnte um die Sicherheit min. zu einem gewissen grad zu gewährleisten.
      Zuletzt geändert von Melchor; 19.09.2005, 08:45.

      Kommentar


      • #4
        1. htmlentities() nur vor der ausgabe nutzen!
        2. mysql_real_escape_string() o.ä. vor dem speichern reicht vollkommen aus.
        3. es ist egal, was der user eingibt, solange die daten nicht irgendwie entsprechend verwendet werden (eval(), exec(), include etc.), kann er dir auch nicht schaden.

        Kommentar

        Lädt...
        X