• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

SQL und Sicherheitsaspekte

blabla333

Mitglied
Ich bin gerade dran für ein neues Projekt sowohl die DB, als auch die php-Strukturen zum Zugriff auf die DB zu schreiben.
Jetzt möchte ich zum einen meine eigenen Fähigkeiten erweitern und zum anderen die Gelegenheit nutzen alles von Beginn an "richtig" zu machen, denn das nachträgliche Korrigieren ist am Ende doch aufwändiger, als wenn man es gleich richtig macht. Deshalb hoffe ich auf ein paar Hinweise von euch, worauf ich achten muss und was ich "einbauen" kann und muss.

Ich würde (für mich auch neu) mysqli verwenden.
Bzgl. SQL-Injections habe ich mir zuvor ehrlich gesagt nie wirklich Gedanken gemacht. Mir fällt es nun schwer herauszufinden, was sinnvoll und effektiv ist. Gestolpert bin ich über "Prepared Statements" (in diesem Fall dann $mysqli->prepare) aber auch einfach Querys, welche mit sprintf und real_escape aufgeräumt werden. Aber ob das wirklich sicher/effektiv ist, kann ich nicht einschätzen.

Worauf ist außerdem noch zu achten (außer Injections)?

Insofern würde ich mich sehr über ein Beispiel mit "Select" und "Insert" freuen. Eben, wie man es wirklich optimalerweise umsetzen könnte oder sogar sollte...

Meine Verbindung sieht z.B. so aus:
Code:
$DBServer = 'localhost';
$DBUser  = 'DB_USER';
$DBPass  = 'DB_PASSWORD';
$DBName  = 'DB_NAME';

$conn = new mysqli($DBServer, $DBUser, $DBPass, $DBName);

if ($conn->connect_error) trigger_error('Database connection failed: '  . $conn->connect_error, E_USER_ERROR);

Hier stellt sich mir schon die Frage, ob Fehlerausgaben grundsätzlich sinnvoll sind bzw. einem potentiellen Angreifer nicht doch Informationen über die Struktur liefern können.

Ein Insert sieht im Moment so aus:
Code:
$sql='INSERT INTO customers (firstname, lastname) VALUES (?,?)';
$firstname = 'John';
$lastname = 'Doe';

$stmt = $conn->prepare($sql);
if($stmt === false) trigger_error('Wrong SQL: ' . $sql . ' Error: ' . $conn->error, E_USER_ERROR);

$stmt->bind_param('ss',$firstname,$lastname);
$stmt->execute();
$stmt->close();

Auch hier die Frage, wie sinnvoll die Fehlerausgabe ist.

Was kann man besser machen?
 
Zuletzt bearbeitet:
Werbung:
Zurück
Oben