PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP für Fortgeschrittene und Experten (http://www.selfphp.de/forum/forumdisplay.php?f=13)
-   -   Sicher vor SQL Injections? (http://www.selfphp.de/forum/showthread.php?t=17712)

pattitheonly 22.09.2007 11:32:09

Sicher vor SQL Injections?
 
Ich habe hier meiner Seite mit Administrator LOGIN. Auf der Administator Seite bekommt man noch zusätzliche Infos angezeigt. Meine Frage ist,wie sicher ist dieser Zugang? Ist der ohne weiteres zu knacken? WIe kann man das dann wirkungsvoller schützen?
Danke
Patti

http://141.64.29.5/wetter/wetterstat...n%20Seite1.php

conmunich 22.09.2007 14:08:49

AW: Sicher vor SQL Injections?
 
sollen wir jetzt vielleicht die seite hacken, um das zu testen? was ist, wenn die seite nicht dir gehört und der besitzer keine erlaubnis dazu erteilt hat?

du solltest uns schon den quelltext zeigen, damit man dazu etwas sagen kann. und gewöhn dir an, keine leerzeichen in deinen dateinamen zu verwenden.

um mysql injections zu vermeiden, sind evtl. diese php funktionen interessant für dich: mysql_real_escape_string(), addslashes(), usw...

gegen xss cross site scripting attacken, wäre noch strip_tags() zu erwähnen.

pattitheonly 22.09.2007 14:38:44

AW: Sicher vor SQL Injections?
 
Hmm, da hast Du recht. Ich dachte eher dann so an Hinweise, was eine SQL Injektion überhaupt ist. Ich werde mich mal ein wenig darüber belesen. Hatte das neulich gelesen und hätte jetzt nicht gedacht, dass es für Profis so einfach ist solche Abfragen auszutricksen.

Eigentlich ist es doch nur möglich, wenn die Werte aus dem Eingabefeld direkt an die DB weitergericht werden, oder? Ich vergleiche zB nur den Wert aus den Eingabefeldern von dem Benutzer mit dem sein Hinterlegtes md5()Password.

PS. das mit den Leerzeichen ändere ich noch.
Danke.
Patti

MatMel 22.09.2007 15:17:32

AW: Sicher vor SQL Injections?
 
Eine mySQL Injection basiert eigentlich darauf, dass eine Variable, die von Benutzer gesetzt wird ungeprüft an einen mySQL Query weitergegeben wird.

Also zeigst du uns am besten mal den Code, damit wir schauen können wie das bei dir aussieht!

pattitheonly 22.09.2007 16:57:45

AW: Sicher vor SQL Injections?
 
Also hier mal der zu prüfende Code, ich würde eigentlich denken das er so passt, aber Ihr seid ja die Profis :-) Bin für jeden Tipp dankbar :-)

Code:

<?php
$verbindunng=MYSQL_CONNECT($server, $Benutzer, $Passwort) or Fehler_1(&$Fehler_1);
MYSQL_SELECT_DB($datenbank) or Fehler_2(&$Fehler_2);
      if(!isset($_POST['submit']))
              { $_POST['Benutzer'] = 0;                //anlegen der POST Variablen
        ?>
                <form action="<?php $PHP_SELF /*verlinkt auf die zur Wetterstation Seite1.php*/ ?>" method="post">
                <table width="100%" bgcolor="#996566" border="0" cellpadding="5" cellspacing="0" align="center">
                  <tr>
                    <td bgcolor="#DADADA" align="center" colspan="2">
                    <b>Admin Login</b>
                    </td>
                  </tr>
                  <tr>
                    <td width="20%" bgcolor="#DADADA">User</td>
                    <td width="70%" bgcolor="#DADADA"><input type="text" name="Benutzer" size="10" class="input"<?php if($_POST['Benutzer'] != "" ) {echo ' value="'.$_POST['Benutzer'].'"';}?>></td>
                  </tr>
                  <tr>
                    <td width="20%" bgcolor="#DADADA">Pass</td>
                    <td width="70%" bgcolor="#DADADA"><input type="Passwort" name="Passwort" size="10" class="input"></td>
                  </tr>
                  <tr>
                    <td bgcolor="#DADADA" align="center" colspan="2">
                    <input type="submit" name="submit" value="Anmelden" class="button">
                    </td>
                  </tr>
                </table>
                </form>
                          <?php
                  }
        elseif(!$_POST['Benutzer'] || $_POST['Benutzer'] == "")        //Benutzerfeld befüllt??
        {
                echo ("
                <script LANGUAGE='JavaScript'>
                top.location.href='Wetterstation Seite1.php';
                </script>
                              ");
        }
        elseif(!$_POST['Passwort'] || $_POST['Passwort'] == "")        //Passwortfeld befüllt?
        {
                echo ("
                <script LANGUAGE='JavaScript'>
                top.location.href='Wetterstation Seite1.php';
                </script>
                ");
                  }
        else
        {
                        $Passwort = md5($Passwort);                                                     
                $sql = mysql_query("SELECT Benutzer, Passwort FROM Mitglieder WHERE Benutzer = '".$_POST['Benutzer']."'") or Fehler_4(&$Fehler_4);  //wähle das Passwort aus der DBmit dem Benutzer
                $result = mysql_fetch_array($sql) or Fehler_4(&$Fehler_4);
                if($Passwort != $result['Passwort'])                            //wenn Passwort falsch,lade Seite neu
                      {
                                echo ("
                        <script LANGUAGE='JavaScript'>
                                    top.location.href='Wetterstation Seite1.php';
                                    </script>
                              ");
                        }
            else
            {
                              $Benutzer = $result['Benutzer'];                                                      //erzeuge Sessionsvariable
                              session_register('Benutzer');                      //registriere die Session
//automatische Weiterleitung an den Admin Bereich
                              echo ("
                              <script LANGUAGE='JavaScript'>
                              top.location.href='Wetterstation Seite1_admin.php';
                                </script>
                              ");
                      }
                        }
      MYSQL_CLOSE();
          ?>


pattitheonly 22.09.2007 17:16:35

AW: Sicher vor SQL Injections?
 
Ich sollte wahrscheinlich mysql_real_escape_string($_POST['Benutzer']) so noch mal absichern. Aber was ist der besonder Sinn der Funktion? Ich habe nur gelesen das alle Eingaben als String umwandelt, aber wird dann der eingschleusste Code nicht trotzdem ausgeführt?

Patti

defabricator 22.09.2007 18:53:32

AW: Sicher vor SQL Injections?
 
Zitat:

Zitat von pattitheonly (Beitrag 106979)
Ich habe nur gelesen das alle Eingaben als String umwandelt, aber wird dann der eingschleusste Code nicht trotzdem ausgeführt?

Nochmal etwas mehr zum Thema lesen
http://de.php.net/security.database.sql-injection

pattitheonly 24.09.2007 21:00:37

AW: Sicher vor SQL Injections?
 
Hallo Leute,
könntet Ihr mir sagen ob dieser Code sicher vor SQL Injections ist?
In der Abfrage bin ich mir nicht sicher.
$sql = mysql_query("SELECT Benutzer, Passwort FROM Mitglieder WHERE Benutzer = '".$_POST['Benutzer']."'") or Fehler_4(&$Fehler_4);
Deshalb habe ich hier mysql_real_escape_string($_POST['Benutzer']) genommen. Aber die Funktion ist mir trotz nachlesen nicht wirklich klar. Ich mache damit einen String aus dem Wert in $_POST['Benutzer']?

Tausend Dank.

Patti

defabricator 24.09.2007 23:47:32

AW: Sicher vor SQL Injections?
 
Zitat:

Zitat von pattitheonly
Aber die Funktion ist mir trotz nachlesen nicht wirklich klar. Ich mache damit einen String aus dem Wert in $_POST['Benutzer']?

Nein, das ist vermutlich schon eine Zeichenkette.
Hast Du Dir http://de.php.net/security.database.sql-injection durchgelesen? Da werden auch Beispiel gezeigt.

Tumasch 13.12.2007 13:11:34

AW: Sicher vor SQL Injections?
 
Mach dir mal ein HTML-File mit dem Formular und schreib im Benutzerfeld folgendes rein:

1' OR '1'='1

ODER

1'; DROP DATABASE 'dbname

Dann weisst du's.

Besser: $benutzer = preg_replace("'[^A-Z]'", "", $_POST['Benutzer']);


Alle Zeitangaben in WEZ +2. Es ist jetzt 14:35:46 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.