SQL-Injection

Gsus

schwankend^^
ID: 215354
L
22 Mai 2006
1.553
68
Hallo,
Ich muss in der Schule einen Vortrag über SQL-Injections zeigen. Das wollte ich eigentlich mit einem Beispiel demonstrieren, allerdings habe ich das Problem, dass er die benötigten Sonderzeichen die ich in Mein Formular eingebe mit / escaped und es so nicht funktioniert. Was muss ich ändern oder Wie geht es richtig?

PHP:
<?php 
 //conf.php beinhaltet Verbindungsaufbau zur DB und session_start();
 include('conf.php');

 if($_GET['action'] == "logout") unset($_SESSION['uid']);
 if($_POST['login']) {
     $result = mysql_query("SELECT `id` FROM `".$mysql_data['prefix']."_user` WHERE `nickname` = '".$_POST['nickname']."' AND `passwort` = '".$_POST['passwort']."' LIMIT 1");         
     $user = mysql_fetch_assoc($result);
     echo $_POST['nickname']."|".$_POST['passwort'];
     $_SESSION['uid'] = $user['id'];
     echo $user['id'];
 }
 if($_SESSION['uid']) echo "Du bist mit der ID ".$_SESSION['uid']." eingeloggt. <a href=\"?action=logout\">Logout</a>";
?>
<form action="" method="POST" name="login">
 <table>
  <tr><td>Nickname:</td><td><input type="text" name="nickname"></td></tr>
  <tr><td>Passwort:</td><td><input type="text" name="passwort"></td></tr>
  <tr><td></td><td><input type="submit" name="login"></td></tr>
 </table>
</form>

dazu die folgende tabelle:
id|nickname|passwort
1|Test|Test
2|1234|

gebe ich nun als Nickname Test'-- ein müsste er mich eigentlich einloggen, tut es aber nicht, da ' escaped wird.

kann mir jemand helfen?

mfg
Gsus
 
und mit augeschaltetem Magic Quotes ist es einfach SQL-Injections zu finden, schwerer ist es, welche mit angeschaltetem zu finden ;)

Btw: seit PHP 5.3 ist magic_quotes per default off :biggrin:
 
Wenn Du an die Serverkonfiguration nicht rankommst, kann folgender Code am Anfang des Skriptes helfen, einen Zustand herzustellen, wie er ohne Magic Quotes wäre:
PHP:
if (get_magic_quotes_gpc() or get_magic_quotes_runtime())
{
    function stripslashes_deep($value)
    {
         return is_array($value)
             ? array_map(__FUNCTION__, $value)
             : stripslashes($value);
    }
    $_POST = array_map('stripslashes_deep', $_POST);
    $_GET = array_map('stripslashes_deep', $_GET);
    $_REQUEST = array_map('stripslashes_deep', $_REQUEST);
}