Hallo,
ich möchte eine Applikation mit PostgreSQL und PHP schreiben und möchte zuerst einmal die Sicherheit abklopfen (newbe ;-).
Wenn ich Variablen auf einer Seite entgegennehme um diese in meinem SQL zu verwenden will ich natürlich SQL Injecten verhindern. Dazu habe ich z.B. folgende Funktion gefunden:
//injection Test
function SQLInjectionTest($checkstring){
$sqltest = array ("/SELECT.*FROM.*WHERE/i",
"/INSERT.*INTO/i",
"/DELETE.*FROM/i",
"/UPDATE.*WHERE/i",
"/ALTER.*TABLE/i",
"/DROP.*TABLE/i",
"/CREATE.*TABLE/i",
"/substr/i",
"/varchar/i",
"/or.*\d=\d/i",
"/and.*\d=\d/i");
foreach ($sqltest as $regex){
if (preg_match($regex, $checkstring)){
return TRUE;
}
}
return FALSE;
}
Damit überprüfe ich zunächst die Get Variable auf Schadcode und ecsape danach noch den String mit htmlspecialchars.
if (SQLInjectionTest($_GET['service'])){
echo "<h1> Unerlaubte Eingabe! </h1>";
exit(0);
}
$sqlString = "SELECT * FROM mytab WHERE service ='".htmlspecialchars($_GET["service"])."'";
$result_service = pg_query($dbconn , $sqlString) or die('Connection failed (pg_query): ' . pg_last_error());
Wäre das so schon ausreichend gesichert oder muss ich das anders machen?
Danke für Eure Hilfe!
Hans