Beispiel: Produktkatalog 4 /8 $res = mysql_query('SELECT titel FROM category WHERE name = ”'.$_GET['q'].'”'); while($row = mysql_fetch_array($res)) { printf("<li>%s</li>", $row['titel']); } katalog.php?q=” UNION SELECT password AS titel FROM users WHERE ”a” = ”a $res = mysql_query(...WHERE name = ”'.mysql_real_escape_string($_GET['q']).'”'); while($row = mysql_fetch_array($res)) { printf("<li>%s</li>", $row['titel']); } SAFE
Beispiel: Produktkatalog (mit Integer) 4 /8 $res = mysql_query('SELECT titel FROM category WHERE id = '.mysql_real_escape_string($_GET['q'])); while($row = mysql_fetch_array($res)) { printf("<li>%s</li>", $row['titel']); } katalog.php?q=0 UNION SELECT password AS titel FROM users $res = mysql_query('SELECT titel FROM category WHERE id = '.intval($_GET['q'])); SAFE
Wäre die 10 eine austauschbare Variable könnte man die Aktion durch ” 1 OR 1 ” für alle übernehmen 4 /8 mysql_query('UPDATE user SET newsletter = '.$_REQUEST['news'].' WHERE userid = 10'); newsletter.php?news=0,pwd=(SELECT pwd FROM user WHERE userid=1)
Dadurch wird der Regex passiert, aber der Dateiname im Filesystem wird abgeschnitten 6 /8 if(preg_match('/(png|gif|jpg)$/', $_FILES['img']['name'])) { move_uploaded_file($_FILES['img']['tmp_name'], 'upload/'.$_FILES['img']['name']); echo "upload success"; } … POST Request Manipulation Content-Disposition: form-data; name="img"; filename="hack.php.png" Content-Type: image/jpeg Content-Transfer-Encoding: binary