PHP – Kanntest du schon? – SQL Injections

SQL Injections ist ein Thema seit jeher. Die Gefahr ist, dass man über Eingabefelder die SQL-Abfrage so manipulieren kann, um Zugriff auf andere Daten zu erhalten. Das ist einfacher als man denkt. Folgende Beispiel PHP Datei:

Als Beispieldatenbank nehme ich die Datenbank phplogin aus dem Artikel des PHP Login Projekt welche eine Tabelle account erhält. Hier stehen sehr sensible Informationen drin und wir können uns über das simple Query alle Account-Daten aus der Tabelle ausgeben lassen. Wie? Ganz einfach:

Normalerweise würden wir in das Input-Feld nur unsere E-Mail Adresse eintragen, ein Bösewicht (auch Cracker – fälschlicherweise Hacker) genannt könnte aber statt seine E-Mail die obige Zeile eingeben. Eigentlich sollte nur jeder User seine Daten als Ausgabe erhalten, doch folgende Ausgabe erhalten wir:

Wir erhalten alle Daten aus der Tabelle und zwar nicht nur für unseren Benutzer, denn durch die Eingabe hat sich das SQL-Statement von

in folgendes geändert:

Entweder ist die Mail leer, oder 1=1. 1=1 ist eine Bedingung, man könnte sie auch true nennen, die immer zutrifft und damit die Bedingung sofort erfüllt und das Statement ausführt.

Wie verhindert man SQL Injections?

Das Stichwort, bzw. die Stichwörter hier lauten: Prepared Statements. Wie der Name schon erahnen lässt gibt man hier die Daten nicht direkt als gesamtes SQL-Statement an den Datenbank Server. Vielmehr lässt man den Datenbankserver das Statement vorbereitet. Das tun wir, indem wir ihm folgendes SQL-Statement “preparen” lassen:

Er weiß jetzt was er machen soll, nämlich einen SELECT * aus der Tabelle account und als Bedingung wird eine email kommen. Der Server kann Vorbereitungen treffen hat aber noch keine konkreten Daten zum Ausführen dieses Befehls. Erst im zweiten Schritt lässt man den Datenbankserver dieses Statement ausführen und gibt ihm zeitgleich als Parameter die Daten mit, Ausschnitt:

Weil man beim PDO-Connector besser mit Prepared Statements arbeiten kann und dieser im Gegensatz zum MySQLi-Connector Named Parameters unterstützt und auch aus weiteren Gründen, habe ich in diesem Beispiel zur Prävention von SQL-Injection vom MySQLIi-Connector zum PDO-Connector gewechselt.

Der vollständige Code hier:

Geben wir nun unsere E-Mail Adresse ein, erhalten wir nur unsere Daten. Verwenden wir wieder den Teil für die SQL-Injection (siehe unten), erhalten wir eine leere Seite (weiß), weil intern ein Fehler geworfen wird der bei mir zumindest nicht direkt angezeigt wird.

Crossplattform Passwort-Manager Enpass

Gerade heutzutage wird das Thema Sicherheit immer wichtiger. Wir alle haben diverse Logins auf verschiedenen Webseiten und viele nutzen leider immer nur ein oder zwei Passwörter für alle Dienste. Bis vor wenigen Jahren gab es noch keine Zwei-Faktor-Authentifizierung (2FA), heutzutage schon. Die 2FA schützt die Accounts deutlich besser, dennoch sollte man unterschiedliche Passwörter für jede Webseite und jeden Dienst haben.

Auf der Webseite “Have I been pwned” kann man eine E-Mail-Adresse oder einen Benutzernamen eingeben und erfährt, ob man von einem Daten-Leck betroffen sein könnte oder nicht. Natürlich ist diese Liste vermutlich nicht vollständig und man sollte sich nicht darauf verlassen, nicht doch betroffen zu sein.

Egal ob ihr nun betroffen seid oder nicht, es zeigt uns, dass wir unsere Accounts absichern müssen und das am Besten doppelt und dreifach. Doppelt kriegen wir ohne Probleme bei fast allen Webseiten und Diensten hin:

  1. Ein einmaliges sicheres Passwort (Länge, Groß/Kleinschreibung, Sonderzeichen, etc.) für jede Webseite/Dienst verwenden
  2. Zwei-Faktor-Authentifizierung (2FA) aktivieren

Die Zwei-Faktor-Authentifizierung wird zwar von den meisten, aber auch heute eben nicht allen Webseiten angeboten. Wichtig ist hier im übrigen auch, sich die Backup-Codes die man erhält an einem sicheren Ort aufzubewahren, digial oder im Bankschließfach.


Jetzt habt ihr für jede Webseite und jeden Dienst ein eindeutiges Passwort, nur wie merkt ihr euch diese? Es gibt zahlreiche Passwort-Manager auf dem Markt, mehr oder weniger gute und mehr oder weniger teure. Einige Beispiele:

  • KeyPass
  • 1Password
  • Enpass

KeyPass ist ein Programm was relativ lange existiert aber nicht alle Features wie 1Password oder Enpass bietet. 1Password war lange Zeit nur der Mac-Welt bekannt und meist genutzt und existiert auch schon länger. Enpass hingegen wird immer beliebter. Ein Grund ist unter anderem das Vermarktungsmodell. 1Password gibt es seit einiger Zeit als Version 6 ausschließlich im Abonnement. Die letzte Standalone Version war Version 4 und diese konnte einmalig für Windows und einmalig für Mac oder zusammen in einem Paket gekauft werden. Da die Unterstützung aber wohl zeitnah eingestellt wird, muss man zur Abo Version greifen. Ein Abo in der Single-Version kostet in Deutschland monatlich 4,49€, die Amerikaner hingegen müssen nur $2,99 zahlen. Die Family-Version kostet 7,49€ in Deutschland und $4,99€ in den USA. Der Vorteil: Alle Geräte/Betriebssysteme sind inklusive und in der Family können 5 Benutzer ihre Daten in eigenen Tresoren oder geteilten Tresoren ablegen.

Für mich als Auszubildender ist Geld knapp, weswegen die Abo-Version von 1Password für mich nicht in Frage kam. Wie der Zufall es so wollte, stieß ich auf Enpass. Enpass hat den Vorteil, dass es in der Desktop-Variante für Windows, Linux und macOS kostenlos daherkommt und für die mobilen Varianten iOS und Android einmalig 10,99€. Synchronisiert wird mit Dropbox, OneDrive, Google Drive, WebDAV (ownCloud/Nextcloud) und weiteren zwischen den Geräten und als Backup. Die Oberfläche von Enpass ist deutlich schlanker und intuitiver als die von 1Password bietet aber ebenso Funktionen wie benutzerdefinierte Felder wie 1Password. Zusätzlich zu den Desktop-Versionen und den mobilen Varianten gibt es noch eine Portable-Version zur Verwendung auf z.B. USB-Sticks, die das Leben nochmals erleichtert.

Zudem bieten Enpass, wie auch 1Password diverse Browser-Erweiterungen an um die Integration in alle gängigen Browser nahtlos zu machen. Login-Daten lassen sich so auf Knopfdruck ausfüllen.

Enpass bekommt ihr hier: https://www.enpass.io/


Mein Eindruck:

Enpass wie auch 1Password sind tolle Passwort-Manager die in der Grundfunktion beide überzeugen. Beide trumpfen mit Erweiterungen und diversen Features. Für mich persönlich ist die Enpass Oberfläche etwas schlanker und moderner aufgesetzt und durch die Abo-Kosten bei 1Password fällt es für mich weg.

Ich benutze Enpass mittlerweile als Desktop-Version für Windows und macOS sowie als Portable und als kostenloser Testversion für iOS. Bisher konnte ich keinen Absturz verzeichnen und die Einrichtung war einfach. Auch die Synchronisierung mit Dropbox funktioniert super. Lediglich die Aktivierung der Browser-Erweiterungen musste einmal manuell in den Einstellungen vorgenommen werden, dass musste ich aber erst selber herausfinden. Für mich ist Enpass eine absolute Empfehlung.

Lediglich wenn man mehrere Tresore oder vielmehr mehrere Familien-Mitglieder versorgen möchte, macht meiner Meinung nach 1Password Sinn.