Sicherheitsfragen zu PHP-Anwendungen auf der Webseite

P

Programmer78

Doppel-As
Hallo miteinander,

habe eine kleine Webseite (4 Jahre statisch, keine Sicherheitsprobleme bisher) und ich frage mich, wie sicher die Verwendung von PHP auf einer Webseite ist.

Beschäftige mich seit kurzer Zeit mit PHP (viel zu lange hinausgezögert das ganze) und möchte damit nun Funktionen hinzufügen.

Für Apache2 gibt es ja Sicherheitsmodule, womit man php zusätzlich absichern kann. Ich glaube snort hat auch einige Filter parat um auf ungewünschte PHP-Aktionen zu reagieren (im Log).

1. Ich habe gelesen, dass Formulareingaben "gefiltert" werden müssen, damit kein Code eingeschleust werden kann. Soweit klar. Gibt es, wie bei der Shellshock-Lücke z.B., ähnliche Varianten um php-Code einzuschleusen? Ich nehme derzeit (fälschlicher Weise bestimmt) gerade nur das Formular als einzige Schnittstelle zum System an.

2. Wenn Eingaben gefiltert werden und alphamumerisch bleibt über und wird per post oder get übertragen, kann dort nicht schon Code eingetragen werden, der bereits den Filter stört?

3. Das wären schon alle Ideen die ich hätte, gibt es sonst noch PHP-Angriffe, die ich absichern muss?

Bemerkung: Ich verwende kein CMS/PHP bisher, alles html mit css. Keine Schnittstellen zum System, solange der Apache sicher ist.

Über ein paar Stichwörter wäre ich schon froh. Vielleicht eine Webseite, die sich nur damit befasst. Die Seiten die ich gefunden habe, reißen das Thema nur ganz kurz an. Nichts tiefgründiges.

Danke

Gruß

P.
 
Pauschal ässt sich das nicht beantworten - es kommt immer drauf an, was du programmierst.

Grundsätzlich gilt aber: Alle externen Daten (also alles, was Du nicht selbst 100% unter Kontrolle hast) sind als potentiell böse zu betrachten und entsprechend zu behandeln.

Daß man meist nur kurze Abrisse findet liegt daran, daß sich zu jedem einzelnen Punkt komplette Buchreihen schreiben lassen. Ob das nun SQL-Injection, Code-Injection, XSRF , XSS, und so weiter ist...
einen groben Überblich über so alles mögliche bietet z.B.
http://www.heise.de/developer/artik...Web-Application-Security-Project-1028905.html
https://www.cccs.de/data/events/200801-websecurity/cccs-web-security.pdf
https://www.cccs.de/data/events/201504-hack-your-own-website/HackYourOwnWebsite.pdf

... und noch vieles mehr. Es ist ein komplexes Feld und "das lernt man nicht eben so"
 
Danke marce,

das hilft erstmal weiter. Tatsächlich sehr komplex, da hast du nicht zu viel versprochen. Sobald die Webseite dynamisch wird, kann man ja schon fast einen Web-Sicherheitsmitarbeiter einstellen. Das owasp Projekt ist nicht schlecht, sogar mit Testmöglichkeiten. Tja da rückt mein PHP-Projekt erstmal wieder in weiter Ferne ;)
 
ach, übertreib mal nicht.

Ja, es ist komplex - aber wenn man sich beim Entwickeln direkt die Gedanken macht und sich zuvor mit den einzelnen Möglichkeiten und Methoden der Sprache beschäftigt hat ist man zumindest auf einem guten Weg. Es trifft ja auch nicht alles überall zu - ohne DB-Anbindung z.B. musst Du Dir über SQL-Injection erst mal keine Gedanken machen.

Wobei eine gute Eingabevalidierung erst schon mal das meiste von vornherein erledigt - dann muss man sich nur noch um die Logik-Teile kümmern :-)
 
hallo

zu komplex sollte man das auch nicht sehen und sich nicht abschrecken lassen ;)
Du weißt ja welchen Input dein Code erwartet, grenze diesen ein und alles andere = böse und wird gefiltert :)
 
ok das mit den Sicherheitsmitarbeiter klingt wirklich übertrieben. War aber eher ironisch gemeint.

Für mich ist halt nur der Sicherheitsaspekt ganz wichtig. Was nützt es, wenn Funktionen auf der Webseite funktionieren aber man irgendwann später eine Email vom Hoster erhält, dass von dem Server Angriffe ausgehen und die Webseite erstmal vom Netz genommen ist?

Ich habe jetzt ja gute Hinweise bekommen und ich werde mich da mal hintersetzen. Vielleicht kann man den sql-kram und den Webserver ja noch in eine chroot Umgebung packen, so dass, falls doch, nicht so leicht auf das System zugegriffen werden kann. Möglichkeiten gibt es bestimmt.
 
Systemnahe Exploits sind bei SQL-Injection nicht das primäre Problem. Eher so Dinge wie Daten abgreifen, Defacement, ...
Chroots helfen da übrigens wenig bis gar nicht.
 
Naja, wenn ich php code mit z. B. into outfile in mein www root einschleusen kann reicht das um befehle auszuführen und somit nen reverse-shell-one-liner einzuschleusen. Ich würde nicht paranoid werden, aber auch nichts vernachlässifen :)
 
Meiner Meinung nach kann man das System schon ganz gut absichern, nachdem was ich gelesen habe.

Vieles kann man schon in der php.ini unterbinden. Mein Vorteil ist es, dass ich die Webseite nicht über ein CMS verwalte. So kann man viele php-Befehle einfach verbieten (fopen, readfile etc). Den Rest an Sicherheit erlangt man dann mit guter Programmierung der php-Skripte (für mich noch in weiter Ferne).

Da ich bestimmt 10 Stunden im Netz gesucht habe, mir alles aber nicht vollständig erscheint, habe ich mir mal ein Buch zum Thema bestellt, speziell PHP-Sicherheit, ist wohl gerade neu rausgekommen. 60 Euro, aber naja, Fachbücher sind immer teuer. Kann ich leider erst nächsten Sonnabend abholen. Bin schon gespannt.
 
Dann gib mal Feedback zu dem Buch, wenn du es gelesen hast ;)
Was mir noch einfällt, du musst das Rad nicht neu erfinden und kannst auf vorgefertigte Klassen zur input validation zurückgreifen z. B. GUMP. Ob das was taugt weiß ich nicht, habs auch grad nur gegoogelt :D
 
Das Buch ist da! Das Buch wurde on Demand gestern gedruckt und gefertigt. Tja, leider ein Fehlgriff.

Hatte das Buch im Buchladen ausgewählt. Eine schöne Übersicht hatten sie, viele viele Bücher zu Php etc. Buchtitel: Webservices mit PHP - Securityaspekte. Klingt gut dachte ich, genau das was ich suche.

Den Klappentext auf der Rückseite habe ich mir leider jetzt erst durchgelesen. Zum Schluss heisst es: "In diesem Buch wird spezell auf die Abwicklung des Datenaustauschs zwischen Webservern mittels PHP eingegangen, und wie es um die Sicherheit der Daten bestellt ist."

Das ist leider genau daneben. Habe das Buch jetzt noch nicht ausgepackt aber die wollen auf SOAP usw hinaus.

Habe jetzt auch mal bei Ama**n geguckt und es gibt viele alte Bücher, auch viele mit schlechten Bewertungen. Das beste ist jedoch
Einstieg in PHP 5.6 und MySQL 5.6 für Prog.-Anfänger geeignet, welches aber sehr wenig auf Sicherheit eingeht und PHP 7 und MySQL: Von den Grundlagen bis zur professionellen Programmierung. Wobei ich lieber noch mit php5 arbeiten würde, obwohl es langsamer sein soll.

Kann sonst noch jemand ein Buch zu PHP und Sicherheit empfehlen? Ich möchte eigentlich nur eine Suche in eigener Datenbank per php realisieren. Später vielleicht ein Kontaktformular. Dazu suche ich Sicherheitshinweise. Am besten ein Buch.
 
Ich möchte eigentlich nur eine Suche in eigener Datenbank per php realisieren. Später vielleicht ein Kontaktformular. Dazu suche ich Sicherheitshinweise. Am besten ein Buch.

Muss es denn unbedingt PHP sein? Die vielen Ausnahmen und Sonderfälle machen PHP meiner Meinung nach eher ungeeignet für Anfänger, gerade wenn man auf Sicherheit Wert legt.

Konkret würde ich eher zu einem Framework wie Django raten.
Damit hast du nicht nur weniger zutun und eine saubere Grundlage, das Ganze hat auch eine hohe Verbreitung und wird daher ausführlich getestet.
Die Chance, dass du dir bei sicherheitskritischen Aspekten in den Fuß schießt, dürfte damit sehr viel niedriger sein.
Gerade auch, da du noch neu in der Materie ist.

Ein paar Sicherheitshinweise zu Django findest du hier:
https://docs.djangoproject.com/en/1.9/topics/security/
http://www.djangobook.com/en/2.0/chapter20.html
 
Denkst Du ernsthaft, die Wahl der Programmiersprache ändert etwas an der Grundthematik? Vor allem aus der Sicht des TE?

Ich kenne seinen Background und seinen Wissensumfang nicht - sollte der im Bereich Python aber genau so weit sein wie im Bereich php - naja, es ist egal, ob Du Dir mit einer Schrotflinte oder eine Uzzi in's Bein schießt. Und nein, nur durch erwähnen des Wortes "Framework" wird nichts besser, man muss auch damit umgehen können und auch dazu muss man programmieren können und die interne von Sprache und Framework verstanden haben.

Zudem ist die Anzahl der Hoster, die von sich aus Python in Webhostingpaketen unterstützen auch eher beschränkt...
 
Denkst Du ernsthaft, die Wahl der Programmiersprache ändert etwas an der Grundthematik? Vor allem aus der Sicht des TE?
Ich kenne seinen Background und seinen Wissensumfang nicht - sollte der im Bereich Python aber genau so weit sein wie im Bereich php - naja, es ist egal, ob Du Dir mit einer Schrotflinte oder eine Uzzi in's Bein schießt.
Sicher, wenn man Python ohne Framework verwendet stimmt das. Deswegen habe ich auch Django und nicht Python erwähnt. Mag sein, dass es für PHP vergleichbare Frameworks gibt, aber da bin ich nicht mehr auf dem Laufenden.

Und nein, nur durch erwähnen des Wortes "Framework" wird nichts besser, man muss auch damit umgehen können und auch dazu muss man programmieren können und die interne von Sprache und Framework verstanden haben.
Die Sache ist aber, dass ein vernünftiges Framework den Entwickler schon in die richtige Richtung lenkt.
Django nimmt einem viele sicherheitskritische Dinge bereits ab die man ohne Framework als Einsteiger leicht vergessen/übersehen/schlecht implementieren würde.
SQL-Injections? Keine Gefahr, solange man nicht auf die Idee kommt RAW-Queries zu nutzen (braucht man fast nie).
CSRF-Protection? Die entsprechende Middleware ist in der Standard-Konfiguration bereits aktiviert. Wenn man die nicht per Hand deaktiviert, kann man sie also auch nicht vergessen.
Nur um mal zwei Beispiele zu nennen.
Außerdem sind die Sicherheitssysteme gut erprobt und untersucht.

Zudem ist die Anzahl der Hoster, die von sich aus Python in Webhostingpaketen unterstützen auch eher beschränkt...
Da hast Du natürlich recht, aber da der TE im Eingangspost von Apache-Konfiguration und zusätzlichen PHP-Modulen sprach, war ich jetzt einfach davon ausgegangen, dass er den Webserver selber hostet.


Natürlich kann man das ganze auch mit PHP ohne Frameworks umsetzen. Dabei keine Sicherheitslücken aufzureißen ist IMHO aber deutlich schwieriger.
 
Auch wenn es vernünftige Frameworks gibt, sollte man sich doch mit dem Thema beschäftigen und das mal nackt programmiert haben. Blind einem Framework zu vertrauen ist meiner Meinung auch nicht der richtige Weg. Das stumpft das Bewusstsein erheblich ab. Soll aber nicht heißen, dass ich jetzt davon abrate ;)

Wie wärs denn mit sowas?

PHP-Sicherheit: PHP/MySQL-Webanwendungen sicher programmieren

Schon bei OWASP reingeschaut?
 
Vielen Dank für die vielen Hinweise. Mit den von euch gelieferten Begriffen, die ich vorher nicht kannte, ist die Suchmaschine auch wieder zu gebrauchen ; ) OWASP ist auch mit auf dem Zettel.

Ich würde gern mit php arbeiten, weil es allgemein üblich ist, sozusagen. Bevor ich etwas auf dem Server mache, wird das lieber erstmal Lokal getestet. Es ist ja ein privates Projekt und ich habe keinerlei Zeitdruck. Genug Zeit um sich da einzulesen. Das tat ich auch um den Server erstmal abzusichern, nachdem er bestellt war. Ist zwar Zeitaufwendig das ganze aber dafür ist es später "nahezu" sicher.

Das eine Buch habe ich wieder zurückgegeben, habe ich gar nicht erst ausgepackt, war kein Problem. Aber der Buchhandel kann leider nur aktuelle Auflagen bestellen, somit sind es meist Bücher zu PHP7.

Die Bücher "PHP-Sicherheit: PHP/MySQL-Webanwendungen sicher programmieren" und "Einstieg in PHP 5.6 und MySQL 5.6 für Prog.-Anfänger" konnte ich also leider nicht bestellen (Buchhandel). Muss ich wohl doch mal über Internet bestellen. Somit habe ich immer noch kein Buch.

Also danke erstmal für eure Links. Habe erstmal genug zu lesen und auch noch verwertbares gefunden:

http://www.php-kurs.com/php-und-sicherheit.htm
http://www.cyberciti.biz/tips/php-security-best-practices-tutorial.html
https://www.blackhat.com/presentations/bh-usa-09/ESSER/BHUSA09-Esser-PostExploitationPHP-PAPER.pdf

Bestimmt nicht vollständig aber mehr als ein Anfang.

[Edit 2017] Link hinzugefügt
https://www.owasp.org/images/4/42/OWASP_Top_10_2013_DE_Version_1_0.pdf
 
Zuletzt bearbeitet:
Zurück
Oben