html: Sicherheit

Sicherheit

SQL Injection:

Um zu verhindern, dass euer Datenbank über eure Website ausgelesen werden kann, sollte man einige Sachen beachten. Als erstes, sollte man vertrauchliche Einträge immer verschlüsseln. Es ist zwar meistens möglich sie zu entschlüsseln, braucht aber sehr viel Rechenpower und macht es damit schwieriger. Besonders bei einem Shop oder auch bei Kundeninformationen jeglicher Art, sollte man vorsichtig sein.

Solche Angriffe werden meistens über GET Variablen die wir aus Formularen kennen ausgeführt. Deshalb sollte man GET nur wenn nötig einsetzten und wenn möglich POST benutzen. Ich empfehle nach heutigem Stand die Verbindung zur Datenbank stets mit PHP Data Objects oder kurz PDO aufzubauen. PDO blockiert automatisch Angriffe auf die Datenbank über die GET Methode und ist somit schon etwas sicherer.

Falls Ihr testen möchtet ob euere GET Übergabe angreifbar ist, könnt Ihr nach dem senden der GET Variable, in der URL den gesendeten Eintrag durch ein Apostroph ersetzen.

Hier ein Beispiel:
https://mdisch.ch/index.php?id=1
wird ersetzt durch
https://mdisch.ch/index.php?id='

Falls auf der Website durch das irgendwelche Änderungen auftreten, ist die Website nicht geschützt und es können mit hoher Wahrscheinlichkeit, Datenbankinformationen ausspioniert werden.

Falls Ihr einen zuverlässigeren Test machen wollt könntet Ihr sqlmap verwenden und eiere Website auf solche Lücken testen.

Webserver:

Grundsätzlich sollte beim Programmieren zuerst lokal getestet werden. Bei Webbasierten Sprachen sollte ein lokaler Webserver erstellt werden und vor dem Veröffentlichen auf Fehler überprüft werden. Somit kann man gut gröbere Fehler im Code frühzeitig erkennen. Ausserdem ist dies für Einsteiger so möglich zu Üben.

Verzeichnis schützen:

Ein Verzeichnis kann durch das hinzufügen einer .htaccess Datei geschützt werden.
Es kann für alle gesperrt werden. Oder durch eine Passwortabfrage geschützt werden.
Mit PHP kann allerdings immernoch darauf zugegriffen werden. Nur der direkte Zugriff wird damit geschützt.
Um ein Verzeichnis für alle unzugänglich zu machen, erstellt man eine Datei namens .htaccess mit folgendem Inhalt.
Deny from all
Diese Datei wird nun in das gewünschte Verzeichnis kopiert.
Das Verzeichnis ist nun geschützt.
Um ein Verzeichnis mit einer Passworteingabe zu schützen, erstellt man eine Datei namens .htaccess mit folgendem Inhalt.
AuthType Basic
AuthName "Passwortgeschützter Bereich"
AuthUserFile /Pfad der Datei/.htpasswd
Require valid-user
Dazu erstellt man die Datei .htpasswd mit dem gewünschten Benutzernamen und Passwort.
test:dGRkPurkuWmW2
In diesem Beispiel wird der Benutzer test mit dem Passwort test gespeichert.
dGRkPurkuWmW2 ist das verschlüsselte Passwort.
Um ein solchen Inhalt für die .htpasswd zu erhalten, gibt es viele Online Generatoren die genutzt werden können.
Einer davon ist z.B. htpasswd generator dieser.
Die Datei wird in diesem Beispiel in das selbe Verzeichnis wie die .htaccess Datei kopiert.

Website als iframe laden verbieten:

Clickjacking teils verhindern.
Um uns vor solchen angriffen zu schützen, erstellen wir falls nicht schon vorhanden eine .htaccess Datei mit folgendem Inhalt.
Header set X-Frame-Options DENY
Damit wird das laden der Website in einem iframe grösstenteils verhindert.
Marc Disch Blog Vefko