Sichere Datenabfrage ??
#1
Wollte mal fragen ob folgendes Script sicher ist oder ob ihr da eine möglichkeit für header injections seht ??

Code:
if(!$_POST["name"]){
    $error[8]="Sie haben keinen Namen angeben!";
}else{
    $namemuster="/^[[:space:]-a-z]+$/i";
    if(!preg_match($namemuster,$_POST["name"])){
        $error[8]="Ungültiger Name! Sie dürfen im Namensfeld nur Buchstaben, Leerzeichen und Bindestriche benutzen!";
    }
}
if(!$_POST["plz"]){
    $error[7]="Sie haben keine Postleitzahl angegeben!";
}else{
    $plzmuster="/^[0-9]{5}$/";
    if(!preg_match($plzmuster,$_POST["plz"])){
        $error[7]="Ungültige Postleitzahl! Sie dürfen nur Ziffern verwenden und die PLZ muss vollständig sein!";
    }
}
if(!$_POST["wohnort"]){
    $error[6]="Sie haben keinen Wohnort angegeben!";
}else{
    $wohnmuster="/^[a-z[:space:]]+$/i";
    if(!preg_match($wohnmuster,$_POST["wohnort"])){
        $error[6]="Ungültiger Wohnort! Sie dürfen nur Buchstaben verwenden!";
    }
}
if(!$_POST["geb_jahr"]){
    $check=false;
    $error[5]="Sie haben kein komplettes Geburtsdatum angegeben.!";
}else{
    $gebmuster="/^[0-9]{4}$/";
    if(!preg_match($gebmuster,$_POST["geb_jahr"])){
        $error[5]="In der Jahresangabe ihres Geburtsdatum dürfen nur Zahlen vorkommen!";
    }
}
if(!$_POST["strasse"]){
    $error[4]="Sie haben keine Straße angegeben!";
}else{
    $strassenmuster="/^[[:space:]-a-z0-9]+[[:space:]]*,[[:space:]0-9]+$/i";
    if(!preg_match($strassenmuster,$_POST["strasse"])){
        $error[4]="Fehlerhafte Eingabe von Straße oder Hausnummer!<br>Denken sie an das \",\" zwischen Straße und Hausnummer !";
    }
}
if($_POST["email"]){
    $emailmuster="/^[_a-z0-9]+(\.[_a-z0-9-]+)*@([a-z0-9-]+)\.([a-z]{2,4})$/i";
    if(!preg_match($emailmuster,$_POST["email"])){
        $error[3]="Fehlerhafte E-Mail Adresse!";
    }
}
if(!$_POST["agb"]||$_POST["agb"]!=1){
    $error[9]="Sie haben die Teilnahmebedingungen nicht akzeptiert!";
}
$gebdaytest="/^[0-9]{1,2}$/";
if(!preg_match($gebdaytest,$_POST["geb_tag"])){
    $error[1]="Headerinformationen fehlerhaft!! Tagesangabe";
}
$gebmonthtest="/^[a-zA-Z]+$/";
if(!preg_match($gebmonthtest,$_POST["geb_monat"])){
    $error[2]="Headerinformationen fehlerhaft!! Monatsangabe ";
}

if(isset($error)){
    echo"Es wurde(n) folgende(r) Fehler festgestellt:<br><hr>";
    foreach($error as $er){
        echo $er."<hr>";
    }
}else{
    $geb=$_POST["geb_tag"].".".$_POST["geb_monat"].".".$_POST["geb_jahr"];
    if(!$_POST["klettern"]||$_POST["klettern"]==""){
        $_POST["klettern"]="nein";
    }
    if(!$_POST["radfahren"]||$_POST["radfahren"]==""){
        $_POST["radfahren"]="nein";
    }
    if(!$_POST["bootfahren"]||$_POST["bootfahren"]==""){
        $_POST["bootfahren"]="nein";
    }
    if(!$_POST["telefon"]||$_POST["telefon"]==""){
        $_POST["telefon"]="Keine Angabe";
    }
    if(!$_POST["badeerlaubnis"]||$_POST["badeerlaubnis"]==""){
        $_POST["badeerlaubnis"]="nein";
    }
    if(!$_POST["stadtaufenthalt"]||$_POST["stadtaufenthalt"]==""){
        $_POST["stadtaufenthalt"]="nein";
    }
    $anmeld=mysql_query("
    INSERT INTO hb_form_2
    (freizeit,name,plz,wohnort,strasse,telefon,geb,email,schwimmen_erlaub,schwimmer,klettern,radfahren,bootfahren,aufenthalt,bemerkungen)VALUES
    ('".mysql_real_escape_string(htmlspecialchars($_POST["freizeit"]))."',
    '".mysql_real_escape_string(htmlspecialchars($_POST["name"]))."',
    '".mysql_real_escape_string(htmlspecialchars($_POST["plz"]))."',
    '".mysql_real_escape_string(htmlspecialchars($_POST["wohnort"]))."',
    '".mysql_real_escape_string(htmlspecialchars($_POST["strasse"]))."',
    '".mysql_real_escape_string(htmlspecialchars($_POST["telefon"]))."',
    '".$geb."',
    '".$_POST["email"]."',
    '".mysql_real_escape_string(htmlspecialchars($_POST["badeerlaubnis"]))."',
    '".mysql_real_escape_string(htmlspecialchars($_POST["schwimmer"]))."',
    '".mysql_real_escape_string(htmlspecialchars($_POST["klettern"]))."',
    '".mysql_real_escape_string(htmlspecialchars($_POST["radfahren"]))."',
    '".mysql_real_escape_string(htmlspecialchars($_POSt["bootfahren"]))."',
    '".mysql_real_escape_string(htmlspecialchars($_POST["stadtaufenthalt"]))."',
    '".mysql_real_escape_string(htmlspecialchars($_POST["bemerkungen"]))."')");
    if(!$anmeld){
        echo mysql_error();
    }else{
        echo "Erfolgreich !";
    }
}
greetings,
Moritz

Follow me on twitter !
  Zitieren
#2
Wieso fragst du denn sowas wie klettern nochmal ab?
Code:
    if(!$_POST["klettern"]){
        $_POST["klettern"]="nein";
    }
    if(!$_POST["radfahren"]){
        $_POST["radfahren"]="nein";
    }
    if(!$_POST["bootfahren"]){
        $_POST["bootfahren"]="nein";
    }
    if(!$_POST["telefon"]){
        $_POST["telefon"]="Keine Angabe";
    }
    if(!$_POST["badeerlaubnis"]){
        $_POST["badeerlaubnis"]="nein";
    }
    if(!$_POST["stadtaufenthalt"]){
        $_POST["stadtaufenthalt"]="nein";
    }

Ich denke mal du hast da doch ein Formular mit Checkboxen. Dann wird doch sowieso ne 1 oder ne 0 übertragen. Ist einfacher als "ja" oder "nein"
In der Datenbank würde ich auch nur 1 oder 0 sichern und nicht "ja" oder "nein".
  Zitieren
#3
ja das ding ist das die datenbank von jemandem ausgelsesen wird der da nunmal ja oder nein stehen haben will
frag mich nicht warum aber auftrag ist auftrag :zwinker:
greetings,
Moritz

Follow me on twitter !
  Zitieren
#4
Ich würds so nicht online stellen *fg*

htmlspecialchars dürft zwar einiges abfangen, aber um wirklich sicher zu sein solltest mysql_real_escape_string verwenden.
http://at.php.net/manual/en/function.mys...string.php

Außerdem ist dei Error Handling wirklich etwas eigenartig. Wieso machst du für jeden Error ne eigene Variable?

Viel einfacher würds gehn wennst alle in ein Array schreibst. ($error[]="Fehler").
Unten fragst dann einfach ab ob $error gesetzt ist oda nicht. Wenn ja gabs zumindest einen Fehler, dann gibst das einfach alles mit for each aus. Wenns nicht gsetzt ist, sollt alles in Ordnung sein.

Damit ersparst dir das $check und brauchst nur ein $error Array.
Write this on my gravestone, write this right on my grave, "To whisky and women, here lies a poor slave".

[Bild: 10_en_btn.gif]

Computer- und Mediensicherheit - FH Hagenberg
Hagenberger Kreis zur Förderung der digitalen Sicherheit
Security Forum
  Zitieren
#5
stimmt .... aber so ist es schon fertig und danke für den funktions tipp Smile
greetings,
Moritz

Follow me on twitter !
  Zitieren
#6
Noch ein paar Kleinigkeiten. Bei dem regulären Ausdruck statt {4,4} reicht es auch nur {4}

Außerdem ist ==0 und ==1 bei den Abfragen nicht wirklich schön. ==1 kannst gleich direkt weglassen und ==0 einfach vorne die Funktion negieren.

Ajo du checkst nur das Geburtsjahr, da kann ich dir über den Rest einschleußen was ich will (Drop Down Boxen sind da kein Hinderniss).

Leere Variablen kann ich übrigens au übergeben. Du checkst immerhin nur ob eine Variable gesetzt ist, nicht ob ihr ein Wert zugewiesn wurde.
Write this on my gravestone, write this right on my grave, "To whisky and women, here lies a poor slave".

[Bild: 10_en_btn.gif]

Computer- und Mediensicherheit - FH Hagenberg
Hagenberger Kreis zur Förderung der digitalen Sicherheit
Security Forum
  Zitieren
#7
jo danke und vielen dank für deine tipps und hilfen.
Werde versuchen alles zu verbessern. :respekt:

So alles verbessert .... hoffe das ganze KÖNNTE jetzt so online gehen ohne das ich irgendwelche angriffe zu befürchten habe ?
Hab mal den QC oben aktualisiert.
greetings,
Moritz

Follow me on twitter !
  Zitieren
#8
Jo sollt grundsätzlich alles passen. Mal schaun wenn ich Zeit hab dann zeig ich dir wie ich das lösen würd Wink
Write this on my gravestone, write this right on my grave, "To whisky and women, here lies a poor slave".

[Bild: 10_en_btn.gif]

Computer- und Mediensicherheit - FH Hagenberg
Hagenberger Kreis zur Förderung der digitalen Sicherheit
Security Forum
  Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 3 Gast/Gäste