Sicherheit prüfen

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

  • Sicherheit prüfen

    Hallo
    Es wäre sehr nett, wenn mir jemand folgendes auf Sicherheit prüfen könnte und mir ein paar Tips geben könnte.
    Ich danke schon ein mal im Voraus

    Vorab: Folgende Codes dienen den Übungszweck. Kommentare habe ich nicht für nötig gehalten, da das ganze nicht zu gross ist/wird.




    login.php
    PHP-Code:
    <!DOCTYPE html Public 
    "-//W3C//DTD XHTML 1.0 Strict//EN" 
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-script.dtd"> 
    <html> 
    <head><title>ACS Login</title></head> 
    <body> 
    <?php 
    include "connect.php"
    include 
    "shc.php"

    ?> 
    <center><h1>Willkommen Zum Login in die ACS</h1><br><br> 
    <form action="logein.php" method="post"> 
    <table border="1" bordercolor="#FF0033"> 
    <tr> 
    <td width="50%">Name:</td><td width="50%"><input type="text" name="uname"></td> 
    </tr> 
    <tr> 
    <td width="50%">Passwort:</td><td width="50%"><input type="password" name="pwort"></td> 
    </tr> 
    <tr> 
    <td width="50%"><img border="0" height="50" src="grafischer-code.php?ID=<?php echo$ID?>" width="200"></td>
    <td width="50%"><input name="ID" type="hidden" value="<?php echo$ID?>"> 
    <input maxlength="6" name="EingegebenerCode" size="6" type="text"></td></tr> 
    <tr> 
    <td><input type="submit" value="Einlogen"</td> 
    </tr> 
    </body> 
    </html>


    Bei der Datei connect.php bin ich mir sicher, dass die Datei gut ist


    shc.php
    PHP-Code:

    <?php 




    $TableCode 
    "Code"




    $Buchstaben = array("A""B""C""D""E""F""G""H""K""M""N""P""Q""R""S""T""U"
    "V""W""X""Y"); 
    $Zahlen = array("2""3""4""5""6""7""8""9"); 




    for(
    $i 0$Code ""$AngezeigterCode ""strlen($Code) < 6$i++) 

    if(
    rand(01) == && isset($Buchstaben)) 

    $Buchstabe $Buchstaben[rand(0count($Buchstaben)-1)]; 
    $Code .= $Buchstabe
    $AngezeigterCode .= $Buchstabe." "

    else 

    $Zahl $Zahlen[rand(0count($Zahlen)-1)]; 
    $Code .= $Zahl
    $AngezeigterCode .= $Zahl." "






    $AngezeigterCode trim($AngezeigterCode); 




    mysql_query("INSERT INTO $TableCode (Code, AngezeigterCode) VALUES ('$Code', '$AngezeigterCode')"); 
    $ID mysql_insert_id(); 




    ?>
    logein.php
    PHP-Code:
    <?php 
    session_start
    (); 
    ?> 


    <?php 

    include "connect.php"
    $TableCode "Code"

    $ResultPointer mysql_query("SELECT Code FROM $TableCode WHERE ID = '".intval($_REQUEST['ID'])."'"); 
    $Result mysql_fetch_object($ResultPointer); 
    if(
    strtolower($Result->Code) == strtolower($_REQUEST['EingegebenerCode'])) 

    $mg $_POST['uname']; 
    $pw md5($_POST['pwort']); 

    $kontr "SELECT Mitglied, Passwort FROM admin WHERE Mitglied LIKE '$mg' LIMIT 1"
    $ausk mysql_query($kontr); 
    $row mysql_fetch_object($ausk); 

    if(
    $row->Passwort == $pw) { 
    $_SESSION['Mitglied'] = $mg
    echo 
    "Login war erfolgreich.<br> 
    <a href=\"acs.php\">Bitte Hier klicken um in die ACS weitergeleitet zu werden</a>"


    else { 
    echo 
    "Benuterz und/oder Passwort ist falsch bitte noch mal versuchen.<br> 
    <a href=\"login.php\">Hier gehts zurück</a>"



    else { 
    echo 
    "Bildercode ist falsch! <a href=\"login.php\">Zurück</a>"

    mysql_close($verbindung); 
    mysql_error(); 
    error_reporting(); 
    ?>

    Dann bginnt es mit:
    PHP-Code:
    <?php 
    session_start
    (); 
    ?> 
    <?php 


    if(!isset($_SESSION['Mitglied'])) { 
    echo 
    "Bitte zuerst einlogen <a href=\"login.php\">Zum Login</a>"
    exit; 

    ?>
    http://www.miks-world.ch

    http://www.genki-board.de.vu

    http://www.mediamiks.de.vu

  • #2
    Zum Thema Code aufbauen: Ginge so doch schneller
    PHP-Code:
    $array array_merge(range('A','Z'),range(2,9));
    shuffle($array);
    $code implode('',array_slice($array,0,5)); 
    Gruss

    tobi
    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

    Kommentar


    • #3
      Danke Tobi

      Den Script habe ich als Tutorial auf webmaster-resource gelesen und angepasst.

      Im Script gab es einige Fehler die ich schon behoben habe.
      Darum frage ich auch nach, ob das ganze sicher ist.

      Das mit array_merge hätte ich auch selbst drauf kommen können -.-
      habe gerade erst kürzlich im buch von dem gelesen -.-

      Mir geht es hauptsächlich bei dem ganzen um die Sicherhei.
      Das mir kein billiger coder das login knackt und dort herumwühlt ^^
      http://www.miks-world.ch

      http://www.genki-board.de.vu

      http://www.mediamiks.de.vu

      Kommentar


      • #4
        der code sieht alles in allem eher "schlecht" aus.

        Und wenn ich dann sowas hier sehe
        PHP-Code:
        $mg $_POST['uname']; 
        $kontr "SELECT Mitglied, Passwort FROM admin WHERE Mitglied LIKE '$mg' LIMIT 1"
        dann hat sich die Frage nach der Sicherheit, denke ich, erledigt. Das sind aber nun wirklich grundlagen. Da muss nicht jeder für jeden seiner Code einen extra Thread aufmachen...

        Kommentar


        • #5
          Was meinst jetzt bei dem?
          Direkt in ein mysql querry stopfen oder wie?
          oder meinst, inval($_POST['uname']);


          ???

          oder meinst du das mit Passwort und Mitglied, dass man das nicht benützen sollte?
          http://www.miks-world.ch

          http://www.genki-board.de.vu

          http://www.mediamiks.de.vu

          Kommentar


          • #6
            1. eingabe ungeprüft übernommen
            PHP-Code:
            $mg $_POST['uname']; 
            2. kein like
            PHP-Code:
            $kontr "SELECT Mitglied, Passwort FROM admin WHERE Mitglied LIKE '$mg' LIMIT 1"
            3. genauer arbeiten, passwort nicht auswählen, nur überprüfen
            PHP-Code:
            $kontr "SELECT Mitglied FROM admin WHERE Mitglied = '$mg' AND passwort = '$pw'"
            und bitte über sql-injections informieren.

            gruß
            peter
            Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
            Meine Seite

            Kommentar


            • #7
              erstmals vielen danke!
              genau das mit sql-injections habe ich für mein Gästebuch gesucht.
              Ich habe es mal durch gelesen und hoffe, ich habe es richtig verstanden

              1.
              PHP-Code:
              $mg $_POST['uname']; 
              Also sollte ich hier erst mal prüfen, ob Sonderzeichen drin sind und diese verbieten (z.B. Anführungszeichen, Prozentzeichen, etc.)
              Ok, werde ich mal machen.

              3.
              PHP-Code:
              $kontr "SELECT Mitglied FROM admin WHERE Mitglied = '$mg' AND passwort = '$pw'"
              Das geht O.o? statt Mitglied würde doch auch ein * gehen? Oder ist das zu gefährlich?
              http://www.miks-world.ch

              http://www.genki-board.de.vu

              http://www.mediamiks.de.vu

              Kommentar


              • #8
                Also sollte ich hier erst mal prüfen, ob Sonderzeichen drin sind und diese verbieten
                hauptproblem ist so was:
                PHP-Code:
                // eingabe
                $_POST['uname'] = 'user WHERE 1=1'
                gruß
                peter
                Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
                Meine Seite

                Kommentar


                • #9
                  In Sachen Maskierung potenziell gefährlicher Zeichen im SQL-Query-String: mysql_real_escape_string aus dem Manual.

                  Von SELECT * ist abzuraten, insbesondere wenn nicht alle Spalten benötigt werden. Benötigst du nur Spalte_a (oder auch Spalte_b und Spalte_c), dann selektiere auch nur diese. Das gehört (für mich) zum sauberen und übersichtlichen Programmieren und kann auch zur Performance beitragen.
                  Nieder mit der Camel Case-Konvention

                  Kommentar


                  • #10
                    @Kropf

                    Sorry, habe ab und zu mal durcheinander und verstehe nichts


                    $mg = QB_SECURE_MYSQL_PARAM($_POST['uname']);

                    Das würde ja schon mal reichen?

                    http://www.miks-world.ch

                    http://www.genki-board.de.vu

                    http://www.mediamiks.de.vu

                    Kommentar


                    • #11
                      Original geschrieben von Griecherus
                      In Sachen Maskierung potenziell gefährlicher Zeichen im SQL-Query-String: mysql_real_escape_string aus dem Manual.

                      Dazu hab ich auch mal ne Frage; ist addslasches weniger sicher wenn es um Mysql geht? Weil ich lese oft "mysql-real-escape-string" aber so weit ich weiß, bewirt adsslasches das Gleiche... oder gibt es dort gravierende Unterschiede?

                      Kommentar


                      • #12
                        @Mik: "QB_SECURE_MYSQL_PARAM" WTF??? Woher hast du das?

                        @Jimm:

                        mysql_real_escape_string() calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a.

                        Kommentar


                        • #13
                          Original geschrieben von TobiaZ


                          @Jimm:
                          Hab ich ja... aber addslashes() escaped die genannten Sachen ebenfalls. Deshalb bin ich etwas verwundert.

                          Kommentar


                          • #14
                            http://www.erich-kachel.de/quibui_ap..._schuetzen.php

                            ist das mit der session eigendlich sicher?
                            Wären vieleicht Cookies besser?
                            Zuletzt geändert von Dj Mik; 18.07.2007, 23:54.
                            http://www.miks-world.ch

                            http://www.genki-board.de.vu

                            http://www.mediamiks.de.vu

                            Kommentar


                            • #15
                              Original geschrieben von JimmDaBimm
                              Dazu hab ich auch mal ne Frage; ist addslasches weniger sicher wenn es um Mysql geht? Weil ich lese oft "mysql-real-escape-string" aber so weit ich weiß, bewirt adsslasches das Gleiche... oder gibt es dort gravierende Unterschiede?
                              Zum x-ten verflixten Mal:

                              Dass addslashes das gleiche tut wie mysql_real_escape_string, ist reiner Zufall, und kann sich in Zukunft auch beliebig ändern.
                              Vielleicht ändert sich DB-seitig mal irgendwas, was die Maskierung weiterer Zeichen notwendig macht - dann wird mysql_real_escape_string sicher entsprechend angepasst - addslashes aber wohl kaum, warum sollte es auch ...

                              Also: Zum Absichern von Eingaben, die in eine MySQL-Query eingebaut werden, wird mysql_real_escape_string verwendet, weil diese Funktion extra dafür gedacht ist - PUNKT. Wer stattdessen eine andere, die das gleiche zu machen scheint (wie bspw. addslashes), dafür nutzt - ist ein Idiot.
                              I don't believe in rebirth. Actually, I never did in my whole lives.

                              Kommentar

                              Lädt...
                              X