Entwickler-Ecke

Programmiersprachen (Server) - db select script sicher(er) erstellen!?


Alice - Di 29.07.08 12:56
Titel: db select script sicher(er) erstellen!?
hi,

ich will mittels einem kleinen script eine flatfile db mit sql-statments versorgen.
diese werden aus einem delphiprog. heraus erstellt.

auf webserverseite soll dieses script die kommenden sql-sets abarbeiten:


Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
<?php

$db = new Database("test");
$sqltxt = $_GET["sqltxt"];
$rs = $db->executeQuery(SELECT."$sqltxt");
.
..
?>


es kommt keine mysql db zu einsatz.
deshalb kann auch kein mysql_real_escape_string() und co.
verw. werden. man müsste also mit php mitteln hier ran gehen.

ich dachte zu ersteinmal vielleicht so:


Quelltext
1:
2:
3:
4:
5:
6:
7:
      
            $sqltxt = $_GET["sqltxt"];
            $sqltxt = ereg_replace(';', '', $sqltxt);
            $sqltxt = ereg_replace('>', '', $sqltxt);
            $sqltxt = ereg_replace('<', '', $sqltxt);
            $sqltxt = stripslashes($sqltxt);
            $rs = $db->executeQuery(SELECT."$sqltxt");


gibt es noch weitere mögl. eine mögl. sql injection
zu verhindern / erschweren ?
mir ist klar das man das nicht zu 100% wasserdicht machen kann,
aber vielleicht sind ja 99% drinn... :-)

cu


DarkHunter - Mo 11.08.08 12:29

Problemantisch ist das du einen großen Teil des SQL-Statements per Parameter bekommst. Damit ist es nicht möglich einfach die SQL-Schlüsselwörter (Insert, Select, ...) zu filtern.

Kann man das nicht irgendwie noch erreichen?


BenBE - Mo 11.08.08 15:55

Sicherheitstechnisch ist solch ein Herangehen tödlich.

Gestalte dein Website-Interface für das Script so, dass die Datenbank-Abfrage auf jeden Fall von PHP gebaut wird. In dem Fall kannst Du nämlich Prepared Statements verwenden und brauchst dich nicht wirklich um das Escaping der Daten kümmern (Abgesehen von Sanity Checks, die aber Standard sein sollten!).