sql injections im login vermeiden

  • Hi ich würde gerne wissen wie ich im folgendenden loginscript sql injections so gut wie komplett vermeiden ,, noch besser ganz vermeiden kann.

    PHP
    <?phpif($verhalten == 0) {?>
    <form method="post" action="index.php?page=log">
        <input type="text" name="user" id="benutzername" /><br />    <input type="password" name="passwort" id="benutzerpasswort" /><br />    <input type="submit" id="einloggen" value="Einloggen" /></form>
    <?php}if($verhalten == 1) {?>
    <?php}if($verhalten == 2) {?>
    <?php}?>
    
    
    </div><div id="logged"><?phpswitch($verhalten) {case 0:echo 'Bitte einloggen.<br><a href="register.php">oder Jetzt Registrieren...</a>';break;case 1:echo 'weiterleitung..';break;case 2:echo 'falsche daten. <a href="index.php">zurück</a>';}?>

    - - - Aktualisiert - - -

    Hier nochmal vernunftig leider nicht im codegenerator. der schmeisst alles kaputt.

    <?php
    if($verhalten == 0) {
    ?>


    <form method="post" action="index.php?page=log">


    <input type="text" name="user" id="benutzername" /><br />
    <input type="password" name="passwort" id="benutzerpasswort" /><br />
    <input type="submit" id="einloggen" value="Einloggen" />
    </form>


    <?php
    }
    if($verhalten == 1) {
    ?>


    <?php
    }
    if($verhalten == 2) {
    ?>


    <?php
    }
    ?>


    </div>
    <div id="logged">
    <?php
    switch($verhalten) {
    case 0:
    echo 'Bitte einloggen.<br><a href="register.php">oder Jetzt Registrieren...</a>';
    break;
    case 1:
    echo 'weiterleitung..';
    break;
    case 2:
    echo 'falsche daten. <a href="index.php">zurück</a>';
    }
    ?>


    ______________


    Ist beim registrieren auch sowas nötig? kann man von dort auch solche unverschämtheiten wie sql injections machen?

    im moment kann ich mich mit 1=1 usw als injection einloggen, des is ja völliger schmaan nicht.

  • Zitat

    Hier nochmal vernunftig leider nicht im codegenerator. der schmeisst alles kaputt.


    Dann verwende einfach einen vernünftigen Editor, dann klappt das auch mit dem Kopieren und Einfügen anständig.

  • Hier nochmal der ganze Code
    benutze webocton scriptly. Wenn du ein besseren kennst , dann auf gib mir den Namen.


    <?php
    $verhalten = 0;
    session_start();
    if(!isset($_SESSION['username']) and !isset($_GET['page'])) {
    $verhalten = 0;
    }
    if($_GET['page'] == "log") {
    /*
    $user = $_POST['user'];
    $passwort = $_POST['passwort'];
    */


    $user = strtolower($_POST['user']);
    $passwort = md5 ($_POST['passwort']);


    $verbindung = mysql_connect("", "" "")
    or die ("Fehler im System");


    mysql_select_db("")
    or die ("Verbidung zur Datenbank war nicht möglich...");


    $control = 0;
    $abfrage = "SELECT * FROM login WHERE user = '$user' AND passwort ='$passwort'";
    $ergebnis = mysql_query($abfrage);
    while($row = mysql_fetch_object($ergebnis))
    {
    $control++;
    }


    if($control != 0) {
    $_SESSION['username'] = $user;
    $verhalten = 1;
    } else {
    $verhalten = 2;
    }
    }
    ?>
    <!DOCTYPE html>
    <html>
    <head>
    <link rel="stylesheet" type="text/css" href="http://h-a-k-a-n-p.de/hakanhp/design.css"/>
    <link href="design.css" type="text/css" rel="stylesheet" media="screen"/>
    <link href="http://h-a-k-a-n-p.de/hakanhp/menu_assets/styles.css" rel="stylesheet" type="text/css"/>


    <title>Login</title>
    <?php
    if($verhalten == 1) {
    ?>
    <meta http-equiv="refresh" content="2; URL=http://start.php"
    <?php
    }
    ?>


    </head>


    <body>


    <div id="wrapper">


    <div id="header">
    </div>


    <div id="cssmenu">
    <ul>
    <li class='active'><a href='#'><span>Anasayfa</span></a></li>
    <li class='last'><a href="#">Bos alan</a></li>
    <li class='has-sub'><a href='#'><span>Bos alan</span></a>
    <ul>
    <li class='has-sub'><a href='#'><span>Bos alan</span></a>
    <ul>
    <li><a href='#'><span>Bos Alan</span></a></li>
    <li class='last'><a href='#'><span>Bos alan</span></a></li>
    </ul>
    </li>
    <li class='has-sub'><a href='#'><span>Bos alan</span></a>
    <ul>
    <li><a href='#'><span>Bos alan</span></a></li>
    <li class='last'><a href='#'><span>Bos alan</span></a></li>
    </ul>
    </li>
    </ul>
    </li>
    <li><a href='#'><span>Bos alan</span></a></li>
    <li class='last'><a href='#'><span>Bos alan</span></a></li>
    </ul>
    </div>


    <div id="content">


    <div id="content2">


    </div>
    </div>


    <div id="login">
    <?php
    if($verhalten == 0) {
    ?>


    <form method="post" action="index.php?page=log">


    <input type="text" name="user" id="benutzername" /><br />
    <input type="password" name="passwort" id="benutzerpasswort" /><br />
    <input type="submit" id="einloggen" value="Einloggen" />
    </form>


    <?php
    }
    if($verhalten == 1) {
    ?>


    <?php
    }
    if($verhalten == 2) {
    ?>


    <?php
    }
    ?>


    </div>
    <div id="logged">
    <?php
    switch($verhalten) {
    case 0:
    echo 'Bitte einloggen.<br><a href="register.php">oder Jetzt Registrieren...</a>';
    break;
    case 1:
    echo 'weiterleitung..';
    break;
    case 2:
    echo 'falsche daten. <a href="index.php">zurück</a>';
    }
    ?>


    </div>


    <div id="footer">
    </div>
    </div>


    </body>
    </html>

    Einmal editiert, zuletzt von capulcu (16. Juli 2013 um 10:21)

  • Verwende http://php.net/mysql_real_escape_string um die Eingaben abzusichern.

    Die Abfrage würde dann so aussehen:

    PHP
    $abfrage = "
    SELECT * 
    FROM login 
    WHERE user = mysql_real_escape_string($user) 
    AND passwort = mysql_real_escape_string($passwort)
    ";

    Editoren sind auch immer ein wenig Geschmacksfrage, ich verwende PSPad.

    EDIT: Du solltest die Datenbank-Schnittstelle wechseln, verwende PDO oder Mysqli. Die verwendete Schnittstelle ist mit der nächsten PHP-Version wahrscheinlich nicht mehr vorhanden, womit dein Script dann nicht mehr funktionieren wird. Zur Zeit gilt sie als depraced, siehe dazu auch http://php.net/manual/de/mysqlinfo.api.choosing.php

    2 Mal editiert, zuletzt von explanator (16. Juli 2013 um 11:05)

  • Danke, klappt wunderbar. Mit ´or1blabla komm ich nicht mehr rein.

    Danke auch für die Info im Edit.

    :danke:

    - - - Aktualisiert - - -

    ehm.. irgendwie komm ich mit garkeinen Benutzernamen mehr rein :lol:

    PHP
    $abfrage = "SELECT * FROM login WHERE user = 'mysql_real_escape ($user)' AND passwort = 'mysql_real_escape_string($passwort)'";
  • ehm.. irgendwie komm ich mit garkeinen Benutzernamen mehr rein :lol:

    [


    Dann musst du halt debuggen.

    Lass dir mal die Variablen ausgeben und schau wie sie in der Datenbank abgelegt sind.

    Was ist damit:

    PHP
    $passwort = md5 ($_POST['passwort']);


    Sind die Passworte auch gehasht in der Datenbank?

  • mit "debuggen" & "gehasht" kann ich leider "noch" nicht viel anfagen. Die hinterlegten Variablen sind eigentlich richtig.


    mit den unsicheren Code hat es ja Funktioniert. Als ich dein Code probiert habe gings nicht mehr. Hab ich vielleicht einfach die anfuehrungszeichen irgendwie falsch gesetzt?


    Egal, lass mal ich nerve bestimmt schon :o

    Einmal editiert, zuletzt von capulcu (16. Juli 2013 um 12:40)

  • PS: Eigentlich sind mir ja die Bewertungen von Beiträgen völlig wurscht, aber jetzt muss ich doch mal was dazu sagen:
    Du kackst hier einen Quellcode unformatiert rein, in dem nichts, aber auch rein garnichts mit SQL-Injektions bzw. Datenbankabfragen zu finden ist und gibst dann eine schlechte Bewertung, weil man darauf hinweist??? Sag mal, geht's noch???

    2 Mal editiert, zuletzt von Bandit (16. Juli 2013 um 13:04)

  • Ich hab dich doch garnicht bewertet?

    Das einzige was ich bewertet habe war die Aussage von explanator < Dann verwende einfach einen vernünftigen Editor, dann klappt das auch mit dem Kopieren und Einfügen anständig.>
    hab beim bewerten geschrieben nicht konstruktiv. Hab ich dir die Bewertung abgegeben?

  • Es klappt nicht. Habs jetzt schon an verschiedene stellen eingesetzt den code, klappt nicht!

    wo muss der code den du mir gegeben hast anfangen und wo enden? bin echt blutiger Anfänger 4Tage im Ganzen

  • Auszug aus den Forenregeln, die auch du akzeptiert hast:

    Zitat

    Inhalt von Beiträgen:
    [FONT=Verdana, Arial, Helvetica, sans-serif]Forum-Hilfe behält sich das Recht vor, jederzeit Beiträge zu löschen, zu verschieben oder zu überarbeiten, die nicht den Forumsregeln entsprechen. Dies geschieht ohne vorherige Information des Verfassers. Die User ist alleine für die von ihnen publizierten Inhalte (Texte; Bilder oder andere Veröffentlichungen) verantwortlich und bestätigt auch damit, das er keine Copyrightgeschütze Werke und Texte hier im Forum veröffentlicht.
    Verboten oder auch unerwünscht sind folgende Inhalte: [/FONT]

    • [FONT=Verdana, Arial, Helvetica, sans-serif]extrem politisch oder religiös orientierte Postings [/FONT]
    • [FONT=Verdana, Arial, Helvetica, sans-serif]strafbare, pornographische, jugendgefährdende, beleidigende oder ehrverletzende Inhalte[/FONT]
    • [FONT=Verdana, Arial, Helvetica, sans-serif]Warez oder fremde copyrightgeschütze Werke [/FONT]
    • [FONT=Verdana, Arial, Helvetica, sans-serif]E-Mail Adressen [/FONT]
    • [FONT=Verdana, Arial, Helvetica, sans-serif]Songtexte [/FONT]
    • [FONT=Verdana, Arial, Helvetica, sans-serif]persönliche Angaben wie Telefonnummern, Adressen usw (diese bitte per PN austauschen) [/FONT]
    • [FONT=Verdana, Arial, Helvetica, sans-serif]oder anderweitig inakzeptabel Postings, die hier nicht erfasst wurden, aber gegen geltendes Recht, die guten Sitten, allgemeines Moralempfinden oder eben gegen die Forenregeln verstossen.[/FONT]
    • Crosspostings - die gleiche Frage in mehreren anderen Foren gleichzeitig stellen