MYSQL Befehl ausführen lassen und Sicherheitsfrage
-Frank
- php
Hallo,
ich möchte, wenn man in einer TEXTAREA einen PHP Code eingibt dass dieser auch durchgeführt wird, sprich Verbindung zur Datenbank aufbauen und QUERY's durchführen.
Meine Versuch ist folgendes:
<?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>
In der Textarea steht nun das ganze "Befehl" drinnen (Verbindung aufbauen, INSERT into ... und Verbindung wieder schliesen), was ich ausführenlassen will. Wenn ich nun auf Absenden Klicke, passiert gar nichts, ich meine damit, dass in der Datenbank nichts neues eingetragen wurde.
Aber wenn ich den Code, der in der Textarea steht, sagen wir mal in test.php speichere, und dann im browser test.php aufrufe klappt es.
Wo liegt der Fehler?
Ich habe ja vorhin erwähnt, dass ich die Verbindung zur der Datenbank selber in die Textbox eingebe.
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.
Gibt es auch PHP Codes, die meine komplette oder einen teil meiner homepage zerstören könnten, z.B. irgendwelche Ordner komplett löschen?
Macht es sinn den Ordner mit htaccess zu schützen damit ich nur den zugriff habe?
Viele Grüße
Frank.
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