phpbar.de logo

Mailinglisten-Archive

[php] SQL Inject

[php] SQL Inject

Sven Eicher phpbar at koalashome.de
Die Jul 18 20:56:57 CEST 2006


Hallo

> ich würde da eher auf diese Funktion setzen:
> http://de2.php.net/manual/en/function.mysql-real-escape-string.php

Dazu hatte ich mir mal ein Funktion zusammengesucht (phpbar.de und php.net 
waren die Quellen):

  /**
  * Variable für sichere Verwendung quotieren
  *
  * ACHTUNG!
  * Damit mysql_real_escape_string selbstständig eine Verbindungskennung
  * finden kann, muss eine Verbindung zur DB ersteinmal bestehen.
  * Dies ist bei der Verwendung von PHPLib standartmäßig nicht der Fall.
  * Hier erfolgt die Verbindung erst mit dem $db->query-Aufruf.
  * Um das zu umgehen, muss man die Verbindung vor der Verwendung dieser 
  * Funktion explizit herstellen:
  * $db = new DB_Example; // Erzeuge ein Datenbankobjekt
  * $db->connect(); // stelle Verbindung zur DB her
  *
  * @param  string  zu quotierende Variable
  * @param  string  DB-Verbindungskennung (falls vorhanden)
  * @see    URL     http://www.php.net/mysql_real_escape_string
  */
  function escape_string($string, $dbcon = false) {
    // stripslashes, falls nötig
    if (get_magic_quotes_gpc()) {
      $string = stripslashes($string);
    }
    
    // mysql_escape_string funktioniert nicht vor PHP-Version 4.3.0
    if (version_compare (phpversion(),"4.3.0") == '-1') {
      return (mysql_escape_string ($string));
    } elseif ($dbcon) {
      // wurde eine MySQL-Verbindungskennung übergeben, verwende diese
      return (mysql_real_escape_string ($string, $dbcon));
    } else { 
      // Ohne MySQL-Verbindungskennung gehts auch; dann versucht 
      // mysql_real_escape_string selbst eine Verbindungskennung zu finden.
      return (mysql_real_escape_string ($string));
    }
  }


Das im SQL eingebunden würde so aussehen:

$sql = 'SELECT COUNT(*) as eingeloggt
           FROM users
          WHERE username = "'.escape_string($_POST['username']).'"
            AND password = MD5("'.escape_string($_POST['password']).'")';
  $result = mysql_query($sql);



-- 
Sven

php::bar PHP Wiki   -   Listenarchive