Jörg Peschke: MYSQL Befehl ausführen lassen und Sicherheitsfrage

Beitrag lesen

Hallo,

<?PHP $_POST["sqlbefehl"]; ?>

<html>
<form action="befehl.php" method="POST">
<table>
<tr>
<td><textarea name="sqlbefehl" cols="64" rows="7"></textarea></td>
</tr>
<tr>
<td><input type="submit" value="Absenden" name="verschicken"/></td>
<td><input type="reset" value="Löschen" name="leeren" /></td>
</tr>
</table>
</form>
</html>

  
Wenn Du Daten in das Textfeld eingibst, werden die erstmal als String an den Server übermittelt. Wenn ich Deine Zeile  
  
`<?PHP $_POST["sqlbefehl"]; ?>`{:.language-php}  
  
aber richtig interpretiere, wandelst Du den String nicht in ausführbaren Code um.  
Du könntest z.b. ein [eval](http://de2.php.net/manual/de/function.eval.php) dazu verwenden. Probier's am besten mal mit einem einfachen Befehl aus "echo 'test'" oder sowas.  
Empfehlenswert ist das aber alles NICHT, und damit kommen wir zum zweiten Teil Deiner Frage:  
  

> Also kann man mir doch keinen bösen CODE (SQL-INJECTION) an meine Datenbank verschicken und sie damit zerstören? , oder siehe ich es falsch.  
  
Das siehst Du falsch:  
Wenn Du in das Textfeld BELIEBIGEN Code eingeben kannst, kann auch ein Angreifer BELIEBIG viel damit kaputt machen - Dateien verändern/löschen/, Datenbanken zerschiessen, bei entspechenden Rechten den ganzen server platt machen, you name it.  
Und, btw,  nur weil ein User den Namen Deiner Datenbank (inkl.Passwort usw.) nicht kennt, heisst das nicht, dass er mit genügend herumprobieren nicht doch irgendwann rein kommt.  
  
=> Was Du da versuchst, ist hochgradig gefährlich, zumindest, wenn Du die entsprechende Seite nicht irgendwie passwortschützt. Selbst dann ists nicht ganz ohne.  
  
=>Es gibt die Paradigmen "eval() is evil" ("eval ist böse") und "All input is evil" ("Jede Eingabe ist böse").  
Bedeutet:  
-> eval kann dazu benutzt werden um BELIEBIGEN Code auszuführen und  
   sollte deshalb nur in begründeten Ausnahmefällen mit entsprechenden  
   Sicherheitsprüfungen eingesetzt werden  
-> ALLES, was ein User irgendwo eingeben kann ist prinzipiell erstmal  
   BÖSE, also dazu geeignet, Deine Software kaputt zu machen.  
   Es ist Dein Job, als Programmierer, darauf zu achten, dass  
   Deine Software die Eingabe des Users so lange analysiert und auseinander  
   nimmt, bis sie keine Gefahr mehr darstellen kann.  
  
Also,  

> Gibt es auch PHP Codes, die meine komplette oder einen teil meiner homepage zerstören könnten, z.B. irgendwelche Ordner komplett löschen?  

Oh ja, die gibt es!  
  

> Macht es sinn den Ordner mit htaccess zu schützen damit ich nur den zugriff habe?  

Besser wäre das. Zusätzlich würde ich aber auf direkte eingabe von PHP- und SQL-Codes verzichten. Wenn Du wirklich ein direktes Web-Interface zur Datenbank brauchst, in der Du direkt SQL eingeben kannst, empfehle ich Dir [PHPMyAdmin](http://www.phpmyadmin.net/home_page/index.php) (mit einem entsprechenden Passwortschutz) einzusetzen.  
  
Viele Grüße,  
Jörg