PHP-Anwendungen sind bekannt für überdurchschnittliche Sicherheitsprobleme. Welche Konfigurationstechniken verwenden Sie, um sicherzustellen, dass die Anwendung so sicher wie möglich ist?
Ich suche Ideen wie:
- Verwenden von gehärtetem PHP / Suhosin
- Verwenden von mod_security
- Deaktiviere register_globals und allow_url_fopen in der php.ini
Ich benutze normalerweise Linux, kann aber auch Windows-Lösungen vorschlagen.
quelle
Meiner Erfahrung nach sind die meisten Schwachstellen auf einer PHP-basierten Website eher auf schlechtes (Site-) Design zurückzuführen als auf Fehler in PHP.
Einige schnelle Tipps:
* Vielleicht werfen Sie auch einen Blick auf einen kurzen Beitrag mit dem Titel "Sichern von phpinfo (), Art von" und lesen Sie unbedingt die Kommentare http://egovsergo.com/2009/04/03/protecting-your-phpinfo/ Es war eine schnelle Idee, phpinfo () (etwas) zu schützen, wenn ich irgendwie vergessen habe, es auf einer Produktionsseite zu entfernen.
Im Allgemeinen schreiben einige Entwickler Wrapper für vertrauliche Funktionen, die prüfen, ob das Flag "Produktionsstandort" gesetzt ist oder nicht, und die vertrauliche Funktion in der Produktion deaktivieren.
quelle
Andere Parameter, die geändert werden sollten, um das PHP zu härten:
Speichern Sie alle PHP-Fehler in der Datei /var/log/phperror.log :
quelle
Ich habe die DotDeb- Repositorys zu meiner /etc/apt/sources.lst hinzugefügt
Da sie PHP / Apache / MySQL viel häufiger patchen als Debian.
quelle
Erwägen Sie die Einrichtung
open_basedir
auf "pro Site" -Basis.open_basedir
ist eine php.ini-Einstellung, die verhindert, dass Ihre Skripte auf Dateien außerhalb einer definierten Whitelist zugreifen. Wenn Ihr Server mehrere Sites hostet, wird verhindert, dass eine Site die Datenbankeinstellungen von einer anderen Site liest. Es wird auch verhindert, dass ein PHP-Skript auf Kernsystemdateien zugreift / diese ändert. Open Basedir ist einfach einzurichten. Fügen Sie einfach die Zeile "php_admin_value open_basedir /my/list/of/folders:/as/a/colon/seperated/list
" zu jedem Apache-Host hinzu.Erwägen Sie auch, die PHP-Skript-Engine für alle Sites / Ordner zu deaktivieren, die keine PHP-Skripte enthalten sollten (z. B. einen hochgeladenen Bilderordner). Auch dies ist ganz einfach: Fügen Sie "php_admin_value engine off" zu allen Apache VirtualHosts hinzu, die kein PHP benötigen. Um PHP in einem Verzeichnis zu deaktivieren, fügen Sie dasselbe in ein Directory-Tag ein.
Führen Sie Dateiberechtigungen so knapp wie möglich aus. Vermeiden Sie den Schreibzugriff auf PHP-Skripte für den Apache-Benutzer. Dadurch wird verhindert, dass sich ein ausgeführtes Skript oder andere Skripte auf derselben Site / demselben Server ändern. Vermeiden Sie 777-Berechtigungen, wenn dies möglich ist. Ermitteln Sie die Mindestberechtigungen, die zum Ausführen der Anwendung erforderlich sind, und verwenden Sie diese.
Wenn Sie mehrere Sites mit jeweils einer eigenen Datenbank hosten, verwenden Sie für jeden einen separaten MySQL / Postgres-Benutzer und stellen Sie die Berechtigungen für jeden Benutzer so ein, dass er nur Zugriff auf die relevanten Datenbanken hat. Dies verhindert wiederum, dass ein unerwünschtes Skript die Datenbank einer anderen Anwendung manipuliert.
Suosin, HardenedPHP, mod_security und ähnliches sind ebenfalls wertvoll, aber verwenden Sie sie zusätzlich zu einer streng gesperrten Konfiguration, nicht stattdessen.
quelle
Suhosin hat ziemlich hohe Performancekosten, daher ist der Kommentar "Kosten nichts" ein bisschen abwegig.
quelle
Suchen Sie nach einigen grundlegenden Firewall- / Topologievorschlägen? Ich mag die Idee, Dinge wie Pfund zu verwenden, um den direkten Zugriff auf den PHP-Webserver von ungewaschenen Internetseiten zu verhindern. Auf diese Weise können Sie den Webserver auch von anderen Teilen Ihres Netzwerks trennen.
quelle
Wenn Sie Suhosin / mod_security / SuPHP verwenden, wird Ihr PHP-Server auf jeden Fall sicherer. Das Deaktivieren bestimmter Funktionen wie exec, passthru, system und escapeshellcmd hilft ebenfalls sehr.
quelle