PHP Sicherheit
In unserer Artikelserie PHP Sicherheit geht es um die sichere Entwicklung von Webanwendungen in PHP. Wir werden dabei auf die wichtigsten Aspekte eingehen, so dass kein Angreifer euer System hacken kann. Als gutes Buch für den Einstieg ist Pro PHP Security zu empfehlen.
Diese Artikel richten sich an Software-Entwickler, nicht an IT Administratoren. Die sichere Installation und der sichere Betrieb eines Webservers ist eine Wissenschaft für sich, die wir hier leider nicht abdecken können. Hierfür können wir euch Linux-Server: Das umfassende Handbuch als Wissensquelle empfehlen.
Damit ihr sichere Webanwendungen entwickeln könnt, solltet ihr die folgenden Gefahren und Konzepte verstehen.
Typische Angriffe auf Webanwendungen
Im folgenden findet ihr die typischen Angriffe auf Webanwendung. Ihr als Webentwickler solltet unbedingt die wichtigsten Angriffsmethoden kennen um eure Webanwendung davor entsprechend schützen zu können.
Sensible Daten sicher abspeichern
Jeder Server kann gehackt werden und manchmal passiert dies schneller als einem lieb ist. Um den Schaden zu minimieren, sollten sensible Daten wie beispielsweise Passwörter oder Kreditkarteninformationen entsprechend geschützt abgespeichert werden. In diesem Artikel lernt ihr die Grundlagen zur sicheren Abspeicherung sensibler Daten.
SQL-Injections
SQL-Injections bezeichnet das Ausnutzen von Sicherheitslücke im Zusammenhang mit SQL-Datenbanken, die durch mangelnde Überprüfung von Eingabeparameter entstehen. Diese Art der Sicherheitslücke zählt zu eine der häufigsten und ist oftmals besonders kritisch, da Angreifer so an sensible Daten eurer Nutzer gelangen können.
Code-Injections
Code-Injection bedeutet, dass ein Angreifer PHP-Code in eure Anwendung einschleust und die Möglichkeit hat diese auf eurem Server auszuführen. Ein erfolgreicher Code-Injection-Angriff hat zur Folge, dass der Angreifer beliebig eure Scripts und eure Datenbank manipulieren kann. Damit zählt eine Code-Injection zu einer der gefährlichsten Angriffen, ist aber zum Glück nur sehr selten möglich.
Cross Site Scripting (XSS)
Cross-Site-Scripting (XSS) bedeutet das Einschleusen von HTML-Code oder JavaScript-Code in eure Anwendung. Solch ein Angriff kann auf eurer Seite entsprechenden Schaden anrichten, beispielsweise indem Besucher vertrauliche Daten in ein manipuliertes Formular eingeben oder der Besucher auf eine fremde, möglicherweise bösartige Website weitergeleitet wird.
Cross-Site-Request-Forgery (CSRF)
Eine Cross-Site-Request-Forgery (abgekürzt CSRF) beschreibt das Unterschieben eines ungewollten Websiteaufrufs durch einen Angreifer. Ist beispielsweise das Bestellformular nicht ausreichend geschützt, so kann ein Angreifer euren weiteren Besuchern eine Produktbestellung unterschieben, von dem die Besucher nichts ahnen.
Authentifizierung und Autorisierung
Dieser Artikel fasst für euch nochmal die wichtigsten Punkte für die Authentifizierung und Autorisierung zusammen. Es kann als Checkliste benutzt werden, um eine sichere Registrierungs- und Login-Funktionalität auf eurer Website zu implementieren.
Daten validieren
Falls ihr bei Benutzereingaben ein gewisses Datenformat erwartet, z.B. dass die Größe der Wohnung als Zahl angegeben wird, so solltet ihr auch überprüfen dass ihr das richtige Format erhalten habt und nicht jemand versucht durch illegale Eingaben beispielsweise eine SQL-Injection oder Cross-Site-Scripting auszulösen. Dieser Artikel erklärt, wie ihr optimal die Nutzerdaten überprüfen könnt.
Sichere Webanwendungen entwickeln
Der wohl wichtigste Schritt zur sicheren Entwicklung einer Webanwendung ist die Vermeidungen der oberen Schwachstellen (SQL-Injection, Code-Injection etc.). Darüber hinaus könnt ihr als Entwickler aber einiges unternehmen um eure Webanwendung noch sicherer vor Angreifern zu machen.
Eine 100% Sicherheit wird man nie erreichen können. Bei komplexen Anwendungen wird es stets Programmierfehler geben, die zu entsprechenden Sicherheitsproblemen führen können. Um die Auswirkungen von einem Programmierfehler aber möglichst gering zu halten, sollte eine Webanwendung bereits im Entwurf entsprechende Sicherheitsaspekte berücksichtigen. So kann an Angriff vielleicht nicht komplett verhindert werden, aber der Schaden kann hierdurch deutlich reduziert werden.
Neben dem sicheren Entwurf solltet ihr eure Website auch auf Schwachstellen testen (sogenanntes Penetrationtesting) sowie ein regelmäßiges Backup anlegen und sicher verwahren.
Penetrationtesting für PHP
Ein Penetrationtest ist ein umfassender Sicherheitstest einer Webanwendung und erstreckt sich über die Überprüfung der Sicherheit möglichst aller Bestandteile. Als Penetration-Tester versucht man systematisch die Anwendung anzugreifen um so Sicherheitslücken wie beispielsweise SQL-Injections oder Cross-Site-Scripting-Schwachstellen frühzeitig zu identifizieren. Ein Penetrationtest kann sehr aufwendig werden und viel Erfahrung benötigen. Aber ein paar kleine Prozeduren des Penetrationtestings sollte jeder PHP-Entwickler kennen und nutzen.
Das sichere Backup
Ein Servereinbruch geht oftmals mit dem Verlust von Daten einher. Deswegen ist ein regelmäßiges Backup eurer wichtigen Daten unerlässlich. Für die meisten Anwendungen ist insbesondere die Datenbank kritisch, da dort alle Kundeninformationen gespeichert sind. Ein Totalverlust der Datenbank kann dann schnell existenzbedrohend werden. In unserem Artikel Datenbankbackup per PHP erfahrt ihr mehr, wie ihr eure Datenbank regelmäßig sichert.
Autor: Nils Reimers