Ergebnis 1 bis 3 von 3
  1. #1
    Mitglied
    Registriert seit
    Jan 2013
    Beiträge
    4
    Danksagungen
    0

    Standard Meine Sicherheitsfunktionen funktionieren nicht.

    Wollte euch fragen, warum mein Sicherheitscode nicht funktioniert habe mysql_escape_string , htmlentities und htmlspecialchars eingefügt.
    Aner beim Vornamen z.B. wenn ich da <b>Mustermann</b> eingebe, erscheint der vorname später beim auslesen fett geschrieben....

    PHP-Code:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <title>ANMELDUNG</title>
    </head>
    <body background="http://www.boule-gemeinschaft-bremen.de/Bilder/back_bgb.jpg">

            
            <img border="0" src="http://www.boule-gemeinschaft-bremen.de/Bilder/kopf_bgb.jpg" width="650" height="155"></td>
        
    <h1><b> Sommerturnieranmeldung </b></h1>

    <?php



    include ("db.php");
     
     
      if(isset(
    $_POST['vornamee'])) // damit kannst du feststellen, ob das Formular abgeschickt wurde 

    $vornamee=htmlentities($_POST['vornamee']);
    $nachnamee=htmlentities($_POST['nachnamee']);
    $lizenzee=htmlentities($_POST['lizenzee']);
    $lizenzez=htmlentities($_POST['lizenzez']);
    $lizenzed=htmlentities($_POST['lizenzed']);
    $vornamez=htmlentities($_POST['vornamez']);
    $nachnamez=htmlentities($_POST['nachnamez']);
    $lizenzze=htmlentities($_POST['lizenzze']);
    $lizenzzz=htmlentities($_POST['lizenzzz']);
    $lizenzzd=htmlentities($_POST['lizenzzd']);
    $vornamed=htmlentities($_POST['vornamed']);
    $nachnamed=htmlentities($_POST['nachnamed']);
    $lizenzde=htmlentities($_POST['lizenzde']);
    $lizenzdz=htmlentities($_POST['lizenzdz']);
    $lizenzdd=htmlentities($_POST['lizenzdd']);
    $vornamee=htmlspecialchars($_POST['vornamee']);
    $nachnamee=htmlspecialchars($_POST['nachnamee']);
    $lizenzee=htmlspecialchars($_POST['lizenzee']);
    $lizenzez=htmlspecialchars($_POST['lizenzez']);
    $lizenzed=htmlspecialchars($_POST['lizenzed']);
    $vornamez=htmlspecialchars($_POST['vornamez']);
    $nachnamez=htmlspecialchars($_POST['nachnamez']);
    $lizenzze=htmlspecialchars($_POST['lizenzze']);
    $lizenzzz=htmlspecialchars($_POST['lizenzzz']);
    $lizenzzd=htmlspecialchars($_POST['lizenzzd']);
    $vornamed=htmlspecialchars($_POST['vornamed']);
    $nachnamed=htmlspecialchars($_POST['nachnamed']);
    $lizenzde=htmlspecialchars($_POST['lizenzde']);
    $lizenzdz=htmlspecialchars($_POST['lizenzdz']);
    $lizenzdd=htmlspecialchars($_POST['lizenzdd']);  

    if(empty (
    $_POST['vornamee'])) 
        echo 
    "Keinen Vornamen f&uuml;r Spieler 1 eingegeben!"
     elseif(empty (
    $_POST['nachnamee'])) 
        echo 
    "Keinen Nachnamen f&uuml;r Spieler 1 eingegeben!";
    elseif(empty (
    $_POST['vereine'])) 
        echo 
    "Keinen Verein f&uuml;r Spieler 1 eingegeben!";     
        elseif(empty(
    $_POST['lizenzee'])) 
        echo 
    "Keine Lizenz f&uuml;r Spieler 1 eingegeben!";
    elseif(empty(
    $_POST['lizenzez'])) 
        echo 
    "Keine Lizenz f&uuml;r Spieler 1 eingegeben!";
    elseif(empty(
    $_POST['lizenzed'])) 
        echo 
    "Keine Lizenz f&uuml;r Spieler 1 eingegeben!";    
        elseif(empty(
    $_POST['vornamez'])) 
        echo 
    "Keinen Vornamen f&uuml;r Spieler 2 eingegeben!"
      elseif(empty(
    $_POST['nachnamez'])) 
        echo 
    "Keinen Nachnamen f&uuml;r Spieler 2 eingegeben!";
    elseif(empty(
    $_POST['vereinz'])) 
        echo 
    "Keinen Verein f&uuml;r Spieler 1 eingegeben!";    
        elseif(empty(
    $_POST['lizenzze'])) 
        echo 
    "Keine Lizenz f&uuml;r Spieler 2 eingegeben!";
    elseif(empty(
    $_POST['lizenzzz'])) 
        echo 
    "Keine Lizenz f&uuml;r Spieler 2 eingegeben!";
    elseif(empty(
    $_POST['lizenzzd'])) 
        echo 
    "Keine Lizenz f&uuml;r Spieler 2 eingegeben!";    
        elseif(empty(
    $_POST['vornamed'])) 
        echo 
    "Keinen Vornamen f&uuml;r Spieler 3 eingegeben!"
      elseif(empty(
    $_POST['nachnamed'])) 
        echo 
    "Keinen Nachnamen f&uuml;r Spieler 3 eingegeben!";
    elseif(empty(
    $_POST['vereind'])) 
        echo 
    "Keinen Verein f&uuml;r Spieler 1 eingegeben!";    
        elseif(empty(
    $_POST['lizenzde'])) 
        echo 
    "Keine Lizenz f&uuml;r Spieler 3 eingegeben!";
    elseif(empty(
    $_POST['lizenzdz'])) 
        echo 
    "Keine Lizenz f&uuml;r Spieler 3 eingegeben!";
    elseif(empty(
    $_POST['lizenzdd'])) 
        echo 
    "Keine Lizenz f&uuml;r Spieler 3 eingegeben!";    
        elseif(empty(
    $_POST['email'])) 
        echo 
    "Keine Emailadresse eingegeben!";

      
    $sql "SELECT count(*) AS anzahl FROM sommerturnier_teilnehmer WHERE lizenzee = '".$_POST['lizenzee']."' AND lizenzez = '".$_POST['lizenzez']."' AND lizenzed = '".$_POST['lizenzed']."' OR lizenzze = '".$_POST['lizenzze']."' AND lizenzzz = '".$_POST['lizenzzz']."' AND lizenzzd = '".$_POST['lizenzzd']."' OR lizenzde = '".$_POST['lizenzde']."' AND lizenzdz = '".$_POST['lizenzdz']."' AND lizenzdd = '".$_POST['lizenzdz']."' " ;
    $query mysql_query($sql);
    $row mysql_fetch_object($query);
    if(
    $row->anzahl 0)
    echo 
    "Eintrag schon vorhanden";
    else{ 




      
      
    $text1 =    $_POST[vornamee].",".$_POST[nachnamee]."/".$_POST[vereine]."\n".$_POST[lizenze]."\n\n" .
    $_POST[vornamez].",".$_POST[nachnamez]."/".$_POST[vereinz]."\n".$_POST[lizenzz]."\n\n ".
    $_POST[vornamed].",".$_POST[nachnamed]."/".$_POST[vereind]."\n".$_POST[lizenzd];

    $from =$_POST[email];


    mail("anmeldung@bremer-sommerturnier.de",Sommerturnieranmeldung,$text1,$from);



     

    include (
    "db.php");





     
     
    $eintrag "INSERT INTO `sommerturnier_teilnehmer`
                (`vornamee`,`nachnamee`,`vereine`,`lizenzee`,`lizenzez`,`lizenzed`,`vornamez`,`nachnamez`,`vereinz`,`lizenzze`,`lizenzzz`,`lizenzzd`,`vornamed`,`nachnamed`,`vereind`,`lizenzde`,`lizenzdz`,`lizenzdd`,`email`)
                VALUES(
                '"
    .mysql_escape_string($_POST['vornamee'])."',
                '"
    .mysql_escape_string($_POST['nachnamee'])."',
                '"
    .mysql_escape_string($_POST['vereine'])."',
                '"
    .mysql_escape_string($_POST['lizenzee'])."',
                '"
    .mysql_escape_string($_POST['lizenzez'])."',
                '"
    .mysql_escape_string($_POST['lizenzed'])."',
                '"
    .mysql_escape_string($_POST['vornamez'])."',
                '"
    .mysql_escape_string($_POST['nachnamez'])."',
                '"
    .mysql_escape_string($_POST['vereinz'])."',
                '"
    .mysql_escape_string($_POST['lizenzze'])."',
                '"
    .mysql_escape_string($_POST['lizenzzz'])."',
                '"
    .mysql_escape_string($_POST['lizenzzd'])."',
                '"
    .mysql_escape_string($_POST['vornamed'])."',
                '"
    .mysql_escape_string($_POST['nachnamed'])."',
                '"
    .mysql_escape_string($_POST['vereind'])."',
                '"
    .mysql_escape_string($_POST['lizenzde'])."',
                '"
    .mysql_escape_string($_POST['lizenzdz'])."',
                '"
    .mysql_escape_string($_POST['lizenzdd'])."',
                '"
    .($_POST['email'])."');";
                
                
    $eintragen mysql_query($eintrag);


            @
    mysql_close($link);
    echo 
    "Sie wurden angemeldet<br>";
    echo 
    "<br>";






    include (
    "db.php");
    $query "SELECT * FROM sommerturnier_teilnehmer";

    $result mysql_query($query);

    while (
    $line mysql_fetch_array($result)) { ?>
     
    <table border="2" width="50%" background="http://www.boule-gemeinschaft-bremen.de/Bilder/back_bgb.jpg">
     <tr>

     <td width="2%">Team</td>

     <td width="10%">Spieler 1</td>
    <td width="10%">Vereien</td>
     <td width="10%">Spieler 2</td>
    <td width="10%">Vereien</td>
     <td width="10%">Spieler 3</td>
     <td width="10%">Vereien</td>
    </tr>
    <tr>
     <td ><?PHP echo $line[id];?></td>
     <td ><?PHP echo $line[vornamee];?>,<?PHP echo $line[nachnamee];?></td><td><?PHP echo $line[vereine];?></td>
     <td ><?PHP echo $line[vornamez];?>,<?PHP echo $line[nachnamez];?></td><td><?PHP echo $line[vereinz];?></td>
     <td ><?PHP echo $line[vornamed];?>,<?PHP echo $line[nachnamed];?></td><td><?PHP echo $line[vereind];?></td>
    </tr>
    </table>
    <?PHP

    }

    mysql_free_result($result);

    mysql_close();





      }
    }  

    ?>

  2. #2
    deaktivierter Nutzer
    deaktiviertes Benutzerkonto

    Standard Re: Meine Sicherheitsfunktionen funktionieren nicht.

    Zitat Zitat von Basti2101 Beitrag anzeigen
    Wollte euch fragen, warum mein Sicherheitscode nicht funktioniert
    "Dein" Code funktioniert nicht, weil du ihn anscheinend irgendwo zusammenkopiert hat, ohne eine Ahnung zu haben, was du da eigentlich tust.

    Da kann man auch nichts dran verbessern, lösche einfach alles und fang nochmal von vorne an. Am besten mit den Grundlagen von HTML bzw. PHP.

  3. #3
    ex-Moderator Avatar von aNtiCHrist
    Registriert seit
    May 2000
    Beiträge
    24.175
    Danksagungen
    27

    Standard Re: Meine Sicherheitsfunktionen funktionieren nicht.

    Es ist zwar erfreulich, dass du auch an die Sicherheit denkst (und dich offenbar auch nicht einfach darauf verlässt, dass es wie gewünscht funktioniert), aber der Code lässt tatsächlich vermuten, dass du da irgendetwas zusammenkopiert hast, ohne es zu verstehen. Das ist gerade im Bereich der Sicherheit fatal.

    Schau dir doch einmal die ersten paar PHP-Zeilen an:

    PHP-Code:
    $vornamee=htmlentities($_POST['vornamee']); 
    [...]
    $vornamee=htmlspecialchars($_POST['vornamee']); 
    Wozu soll die hier als erstes zitierte Zeile gut sein? Kurz darauf überschreibst du $vornamee, ohne die Variable dazwischen auch nur ein einziges mal zu verwenden. Auch dieser neu definierte Inhalt wird später nicht mehr verwendet. Diese ganzen Zeilen sind damit völlig wirkungslos.

    Überhaupt ist die Funktion htmlentities für eine sichere Ausgabe von Strings in einem HTML-Kontext unnötig, dazu benötigt man lediglich htmlspecialchars. Eine Anwendung von beiden Funktionen nacheinander würde ggf. den ausgegebenen Text verfälschen, die Nutzung von htmlentities anstelle von htmlspecialchars würde immerhin noch unnötig aufgeblähten Code erzeugen.

    Zu beachten ist auch, dass die Maskierung der in HTML gefährlichen Zeichen bei der Ausgabe in einem HTML-Kontext erfolgen muss, nicht etwa vor dem Einfügen in eine Datenbank. Dort sind teilweise andere Zeichen gefährlich. An der Stelle, wo du die Strings später in einem HTML-Kontext ausgibst (<td ><?PHP echo $line[vornamee];?>,<?PHP echo $line[nachnamee];?></td><td><?PHP echo $line[vereine];?></td) fehlt die htmlspecialchars-Maskierung.

    Der nächste wesentliche Fehler ist hier zu finden:
    PHP-Code:
    $sql "SELECT count(*) AS anzahl FROM sommerturnier_teilnehmer WHERE lizenzee = '".$_POST['lizenzee'][...] ; 
    Da $_POST['lizenzee'] offenbar zuvor an keiner Stelle geeignet durch mysql_real_escape_string maskiert wurde (was so pauschal auch nicht korrekt wäre), besteht hier das Risiko von SQL-Injection. Pauschal nicht korrekt ist es, weil man die Strings möglicherweise auch in einem anderen Kontext (etwa in der E-Mail) nutzen möchte.

    Allgemein würde ich allerdings für neuen Code von der Nutzung der alten mysql_*-Funktionen absehen. Sie sind unnötig fehleranfällig und werden zudem mit PHP 5.5 auch offiziell missbilligt: http://www.php.net/manual/en/intro.mysql.php

    Bei der mail-Funktion liegt dann schon wieder die nächste Schwachstelle. Dort musst du zumindest Zeilenumbrüche in der im Header verwendeten Variable entfernen, um E-Mail-Injection zu verhindern. Generell bietet es sich an, eine fertige Mail-Bibliothek wie z. B. Swift Mailer zu nutzen. Damit verhindert man nicht nur solche Schwachstellen, sondern sorgt auch gleich für standardkonforme Mails. Ansonsten müsstest du dir nämlich z. B. für Umlaute eine korrekte MIME-Implementierung schreiben und das ist alles andere als einfach.

  4.  
     
     

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •