Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
faecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:sicherheit:start [09.06.2021 15:06] – [Blacklisting/Whitelisting] sbel | faecher:informatik:oberstufe:datenbanken:projekt:dokuwiki_plugin:sicherheit:start [Unbekanntes Datum] (aktuell) – gelöscht - Externe Bearbeitung (Unbekanntes Datum) 127.0.0.1 | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | ====== Sicherheitsüberlegungen ====== | ||
- | Beim Umgang mit Daten und Datenbanken müssen Sicherheitsüberlegungen von Beginn an bei der Anwendungsentwicklung berücksichtigt werden. Bei Applikationen, | ||
- | |||
- | Die [[https:// | ||
- | |||
- | ===== " | ||
- | |||
- | |||
- | > " | ||
- | |||
- | |||
- | |||
- | [[{ | ||
- | |||
- | Eine Injection-Sicherheitslücke entsteht vereinfacht gesagt immer dann, wenn man (Benutzer-)Eingaben ohne weitere Validierung übernimmt und an weitere Befehle oder in weitere Verarbeitungsschritte weiterreicht. Das passiert sehr leicht, da man beim Programmieren für gewöhnlich nicht darüber nachdenkt, welche unsinnigen oder gar bösartigen Eingaben Benutzer möglicherweise machen, sondern meist darauf konzentriert ist, die erwarteten Eingaben effektiv weiterzuverarbeiten. | ||
- | |||
- | <WRAP center | ||
- | Grundregel der Webentwicklung: | ||
- | </ | ||
- | |||
- | ==== SQL-Injections ==== | ||
- | |||
- | Da wir hier vor allem mit Datenbanken und Datenbankabfragen arbeiten wollen, spielen sogenannte SQL-Injections eine große Rolle in unserem Setting. Dabei erwarten wir beispielsweise einen //Namen// als Eingabe eines Formularfelds, | ||
- | |||
- | Eine <wrap hi> | ||
- | |||
- | <code php> | ||
- | // id wird in einem Formular vom Benutzer erfragt | ||
- | if(isset($_POST[' | ||
- | $id = $_POST[' | ||
- | } else { | ||
- | | ||
- | } | ||
- | |||
- | echo " | ||
- | $sql = " | ||
- | $rows = $pdo-> | ||
- | foreach ($rows as $row) { | ||
- | echo $row[' | ||
- | } | ||
- | </ | ||
- | |||
- | Dies funktioniert zwar, ist aber anfällig für SQL Injections. Ein Angreifer kann über den POST-Parameter die SQL-Abfrage manipulieren und weiteren SQL-Code einschleusen. | ||
- | |||
- | Gibt der Anwender nämlich ins Formularfeld beispielsweise folgendes ein: | ||
- | '' | ||
- | |||
- | Werden alle Datensätze ausgegeben, denn an die Datenbank wird die Abfrage '' | ||
- | |||
- | {{ : | ||
- | (Quelle: https:// | ||
- | |||
- | ===== Prepared Statements ===== | ||
- | |||
- | Um SQL-Injections zu unterbinden, | ||
- | |||
- | <code php> | ||
- | // id wird in einem Formular vom Benutzer erfragt | ||
- | if(isset($_POST[' | ||
- | $id = $_POST[' | ||
- | } else { | ||
- | | ||
- | } | ||
- | |||
- | echo " | ||
- | |||
- | $statement = $pdo-> | ||
- | $statement-> | ||
- | |||
- | foreach ($row = $statement-> | ||
- | echo $row[' | ||
- | } | ||
- | </ | ||
- | |||
- | ===== Blacklisting/ | ||
- | |||
- | Ebenfalls effektiv ist es, Parameterwerte mit Blacklisting oder Whitelisting zu überprüfen und die Verarbeitung abzubrechen, | ||
- | |||
- | * Beim Blacklisting kann man beispielsweise festlegen, dass die Verarbeitung abgebrochen wird, wenn bestimmte Zeichen in der Eingabe enthalten sind. Beispiel: "Wenn eimn '' | ||
- | * Beim Whilelistinh legt man ein Muster fest, dem die Eingabe entsprechen muss um zur Weiterverarbeitung zugelassen zu werden. Beispiel. "Im Feld '' |