Frage:
Durchsuchbare PHP-Dateien: Ist dies eine Sicherheitslücke?
user45139
2014-04-24 14:20:54 UTC
view on stackexchange narkive permalink

Ich habe einen Freund, der eine in PHP entwickelte Website hat, auf der wir alle seine Dateien nacheinander durchsuchen können (natürlich können wir den Inhalt der PHP-Dateien nicht lesen).

Tun Sie das Denken Sie, dies ist eine Sicherheitslücke? Wenn ja, in welchem ​​Sinne?

Ich möchte nur einen Punkt hinzufügen. Obwohl es sich möglicherweise nicht um eine große Sicherheitsanfälligkeit handelt, ist es eine schlechte Benutzeroberfläche, dem Benutzer eine einfache Verzeichnisliste anzuzeigen. Wenn Sie eine Website haben, auf der eine Reihe von Widgets profiliert sind (z. B. "example.com/widgets/a" oder "example.com/widgets/b"), ist es besser, Ihre eigene Ressourcenliste (zusammen mit der Suche) anzuzeigen und vielleicht eine kurze Einführung in Widgets) unter "example.com/widgets/". Eine Unix-Verzeichnisliste enthält wahrscheinlich eine Reihe von PHP-Dateien, die für den Endbenutzer keinen Sinn ergeben. Off Topic in diesem Forum, aber deshalb ist dies ein Kommentar und keine Antwort.
Sechs antworten:
Adi
2014-04-24 14:41:30 UTC
view on stackexchange narkive permalink

Was Sie beschreiben, ist eine normale Verzeichnisliste.

enter image description here

An sich ist die Verzeichnisliste kein Sicherheitsproblem. Wenn die Sicherheit Ihres Systems beeinträchtigt wird, nachdem Sie die Struktur Ihrer Dateien und Verzeichnisse herausgefunden haben, verlassen Sie sich auf Sicherheit durch Dunkelheit, was schlecht ist. Beispiele für diese schlechte Vorgehensweise sind:

  • Verwenden geheimer Verzeichnisnamen für den Zugriff auf vertrauliche Dateien.
  • Einschränkung der ausführungsberechtigten Funktionen, um nur auf deren URLs zuzugreifen anstatt die richtigen Berechtigungen zu verwenden.
  • Hinterlassen Sie spezielle Türen / Hintertüren für Entwickler.

Allerdings , als Teil einer guten Sicherheitsrichtlinie, danach Wenn Sie geeignete Sicherheitsmaßnahmen implementieren, ist es vorteilhaft, die funktionierenden Teile Ihres Systems zu verdecken. Je weniger Sie über Ihr System zeigen, desto weniger Informationen kann ein Angreifer über Sie erhalten, was bedeutet, dass Sie seine Arbeit erschweren.

"Also, was soll ich tun?" du fragst. Einfach: Deaktivieren Sie die Verzeichnisliste in Ihren Webserverkonfigurationen. In Apache gehen Sie zu Ihrer httpd.conf und suchen die Zeile mit der Aufschrift

 . Optionen einschließlich Indizes  

Entfernen Indiziert aus der Zeile und startet dann den Apache neu.

Gute Antwort, obwohl eine Alternative zum Deaktivieren von Indizes (was funktionale Auswirkungen haben kann) darin besteht, einfach eine Dummy-Datei index.html / index.php hinzuzufügen
@symcbean Das heißt, wenn der Server so konfiguriert ist, dass er diese Dateien als Indexdateien verwendet. Meistens ist dies jedoch standardmäßig aktiviert. Ich stimme zu, dass dies ein guter Rat ist.
Es ist wichtig, den Verzeichnisinhalt nicht anzuzeigen. Eine Website wurde entführt, weil ein gelangweilter Benutzer die PHP-Verzeichnisliste durchgesehen und versucht hat, zufällige Werte an die Skripte zu übergeben, und eine große Sicherheitslücke in einem Deleteuser-Skript gefunden hat, bei der die übergebene Benutzer-ID immer gelöscht wurde, ohne nach Administratorrechten zu suchen - also der Benutzer der Website Basis war in einer Stunde weg.
Einverstanden Tiefenverteidigung = gut, Sicherheit durch Dunkelheit = schlecht. Trotzdem hält es niemand für eine gute Idee, die Struktur und möglicherweise den Inhalt Ihrer Quellcodedateien unentgeltlich offenzulegen, oder? Es ist großartig, dass Sie den Inhalt der PHP-Dateien nicht lesen können. Wenn Sie jedoch die Namen und Pfade dieser Dateien sehen können, einschließlich Konfigurationsdateien oder anderer vertraulicherer Dateien, wie schwierig ist es, anzunehmen, dass sie sich in / var / www / http oder / var / www / https befinden, und diese Informationen zu verwenden um zu versuchen, sie durch ein anderes Loch freizulegen oder auszunutzen, das Sie versehentlich offen gelassen haben oder von dem Sie nichts wissen?
* Ein Teil * der Strategie der Tiefenverteidigung ist, dass Sie den Bösen den Job so schwer machen, dass es ihre Zeit nicht wert ist, und sie werden weitermachen. Je mehr glänzende Objekte Sie vor ihren Gesichtern winken, desto interessanter machen Sie Ihr Vermögen und desto wahrscheinlicher ist es, dass sie übermäßig viel Zeit damit verbringen, herauszufinden, wie Sie Ihr System knacken können. Je mehr Zeit sie damit verbringen, es zu versuchen, desto schlimmer ist es für dich ...
@symcbean Bitte beachten Sie auch, dass Sie dies in jedem Verzeichnis tun müssen, wenn Sie sich für die Verwendung von index.html-Dateien entscheiden.
@Craig Danke für die Eingabe. Ich habe die Antwort mit einem besseren Wortlaut für diesen Teil geändert.
Ja, ich habe nicht über die Vor- und Nachteile der Verwendung von Inhaltsverhandlungen als alternative Lösung gesprochen - die meisten davon sollten für einen Webserver-Administrator selbstverständlich sein - ich habe lediglich versucht, darauf hinzuweisen, dass dies eine Option ist.
Oft speichert cPanel eine `error_log`-Datei im Webroot Ihrer App ... der Webserver interpretiert sie * nicht * wie die` .php`-Dateien. Das würde viel zu viel geben!
Sie sollten sicherstellen, dass Sie den Webserver so konfigurieren, dass er diese Datei NICHT bereitstellt, oder Berechtigungen festlegen, damit der Webserver sie nicht lesen kann, oder so. Jeder, der vermuten kann, dass Sie sich auf einem System befinden, auf dem cPanel ausgeführt wird, kann leicht genug erraten, dass möglicherweise eine Datei mit diesem Namen vorhanden ist, unabhängig davon, ob Sie die Verzeichnisliste zulassen oder nicht.
Ich würde hinzufügen, dass, während die Auflistung "möglicherweise nicht" Schwachstellen aufdeckt, wenn Sie eine Auflistung von Dateien haben, Sie versuchen können, zufällige Parameter und Überschriften auf sie zu werfen und zu sehen, wie sie reagieren. Es ist viel einfacher, einen Server zu hacken, wenn Sie die Dateinamen kennen, die möglicherweise auf Skripte reagieren. Wenn Sie so etwas wie "phpinfo.php" haben, können Sie auch viele Konfigurationsdaten verfügbar machen, einschließlich möglicherweise vertraulicher Informationen. Man könnte sich auch andere Skripte ansehen und herausfinden, ob es etwas gibt, das Dateien usw. wiedergeben kann. Wenn Sie eine Liste erhalten, gibt es wahrscheinlich auch andere falsch konfigurierte Sicherheitsvorkehrungen.
So wie ich das sehe, ist Sicherheit durch Dunkelheit theoretisch nichts. Der Betrag, den Sie auf der praktischen Seite erhalten, wenn Sie etwas so Einfaches wie das Deaktivieren der Verzeichnisliste tun, lohnt sich jedoch astronomisch. Wenn ich eine absolut sichere Anwendung hätte, könnte ich meinen vollständigen Quellcode allen offenlegen, und das sollte keine Rolle spielen. In Wirklichkeit würden wir dies niemals in Betracht ziehen! Das Aufdecken Ihrer Verzeichnisstruktur ist ein ähnliches Problem wie das Aufdecken der Quelle. Tu es einfach nicht
ndrix
2014-04-24 15:46:45 UTC
view on stackexchange narkive permalink

Um die Antworten von @adnan und @ william-calvin zu ergänzen:

Es kann ein Problem sein;)

  1. Es werden Namen angezeigt von Dateien, auf die beispielsweise nur authentifizierte Benutzer zugreifen können (denken Sie an "change_settings.php" für angemeldete Benutzer). Nun ist dies an sich kein Problem. Wenn seine Website gut geschrieben ist, führt er vor dem Laden jeder Datei eine ordnungsgemäße Autorisierungsprüfung durch. Unter einem anderen Gesichtspunkt "ordnet" ein guter Crawler / Spider alle Dateien zu, auf die sowieso zugegriffen werden kann.

  2. Wenn er mit Sicherungsdateien unordentlich ist (denken Sie an: secret.bak oder blah.php.old), dann können andere diese Dateien lesen. Dies gilt auch für schnelle phpinfo () - und db_dump.sql -Dateien.

  3. Er kann Dateien einschließen, und Haben Sie diese mit einer Nicht-PHP-Erweiterung, wie z. B. db.inc, abhängig von Ihrem Apache-Setup, kann ein Angreifer diese möglicherweise lesen.

  4. ol>

    Also, wie von erklärt die anderen - es ist schlechte Praxis. Es gibt mehr Informationen als es sollte.

Gleiches gilt für Protokolle, die die Website möglicherweise erstellt.
William Calvin
2014-04-24 14:32:27 UTC
view on stackexchange narkive permalink

Ja. Dies ist definitiv ein Problem.

Wenn ich Ihre Struktur kenne, kann ich Ihr System besser verstehen, wodurch ich Ihr System leichter angreifen kann.

Es wird empfohlen, Ihre Verzeichnisliste zu deaktivieren (siehe dieses Tutorial, wenn Sie CPanel verwenden).

Je weniger Hacker wissen, desto schwieriger müssen sie nachdenken.

Wahr.Sie müssen jedoch in der Lage sein, ein sicheres System zu haben, selbst wenn die Verzeichnisstruktur bekannt ist.Denken Sie an Open-Source-Projekte, bei denen dies allgemein bekannt ist (z. B. WordPress).
trysis
2014-04-24 20:11:03 UTC
view on stackexchange narkive permalink

Um Adnans Antwort zu ergänzen, lösen einige PHP-Frameworks wie PyroCMS das Problem in Ihrer Frage, indem sie eine Kombination aus .htaccess -Dateien und einer Indexdatei mit dem Namen index verwenden .php in jedem Verzeichnis.

Eine .htaccess -Datei ist wie eine Erweiterung Ihrer Serverkonfiguration in Dateien wie php.config , kann jedoch direkt in die Site-Ordner aufgenommen werden, obwohl sie in bestimmten Fällen aufgrund der Serverdateien möglicherweise nicht zulässig sind oder nicht funktionieren. Sie können sie auch verwenden, wenn Sie keinen Zugriff auf die Serverdateien haben, z. B. wenn Sie irgendwo eine Site in der Cloud haben. Sie können verwendet werden, um den Zugriff auf Dateien in dem Verzeichnis, in dem sie sich befinden, oder in untergeordneten Ordnern zu beschränken. PyroCMS und andere Frameworks haben häufig eine htaccess -Datei in jedem einzelnen Ordner, von denen viele den Zugriff auf den Ordner und alle seine Unterordner einschränken oder verweigern.

index.php ist eine der Standardseiten, die angezeigt werden, wenn die URL auf den Ordner verweist. Sie können diese Standardseiten jedoch in Ihren Serverdateien konfigurieren. Wenn der Benutzer beispielsweise zu example.com/folder navigiert und sich keine dieser Standarddateien in diesem Verzeichnis befindet, wird auf der Seite angezeigt, was Ihr Freund wahrscheinlich sieht. Dies ist wahrscheinlich die Ansicht, die Adnan anzeigt in seiner Antwort. Wenn sich in diesem Ordner jedoch eine index.php -Datei befindet, wird auf der Seite stattdessen angezeigt, was sich in <site folder> / folder / index.php befindet. PHP-Frameworks haben häufig eine index.php in jedem oder fast jedem Ordner und Unterordner für Sie. Viele dieser Dateien haben so etwas wie:

  <div>Forbidden !!! < / div> <div>Bitte gehen Sie nicht hierher! Es ist sehr empfindlich! < / div>  

Da diese .htaccess - und index.php -Dateien bereits in all diesen Ordnern abgelegt sind, müssen Sie dies nicht selbst tun, obwohl Sie sie herausnehmen können wenn Sie Ihre Website anpassen möchten oder müssen. Auch wenn Sie diese Frameworks letztendlich nicht verwenden, kann es beim Entwerfen Ihrer Website hilfreich sein, ein paar herunterzuladen und zu sehen, was sie tun. Achten Sie jedoch darauf, da viele von ihnen Hunderte von Megabyte groß sind.

Übrigens, es ist eine schlechte Praxis, diese Dateien durchsuchbar zu machen. Der Punkt bei dieser Antwort ist, dass es Tools gibt, mit denen Sie verhindern können, dass Sie den Boilerplate-Code tausende Male wiederholen müssen, manchmal buchstäblich, und es kommt einfach so vor, dass die Themen in dieser Frage Boilerplate-Code beinhalten, bei dem diese Tools helfen können.

Akam
2014-04-24 21:52:56 UTC
view on stackexchange narkive permalink

Ja, in Bezug auf die obigen Antworten möchte ich nicht dieselben Informationen weitergeben, sondern ein echtes Ereignis, das meiner Organisation passiert ist.

Wir hatten einen Webserver (Front-End, dessen Clients ihre sehen können Informationen zum Internetkonto, Aufladefähigkeit usw.)

Der Entwickler hat einen BigDump hochgeladen, um die Triple-A-Serverdaten zu sichern. Dabei hat ein Angreifer das Verzeichnis überprüft und eine Dump-Datei gefunden, die alle Rubbelkarten enthält und Kontoinformationen, hoffentlich hat er mir Bericht erstattet und wir haben dieses Problem gelöst.

Wie bereits erwähnt, habe ich für meine Organisation eine Richtlinie für diese Funktion erstellt, da ich mich auf Sicherheit durch Dunkelheit stütze und das Abhören von Verzeichnissen besser deaktiviere sollte auf allen Webservern deaktiviert sein.

Dr. Abhishek Ghosh
2014-04-25 19:02:39 UTC
view on stackexchange narkive permalink

Übrigens gibt es in Ubuntu keine httpd.conf (derzeit am 14.04. Suchen Sie nicht danach, Sie bearbeiten die Datei apache2.conf ).

Um Ihre PHP-gesteuerte Website vor den Script-Kiddies zu schützen, können Sie mein langes Tutorial zum Härten von WordPress lesen (ich habe einen Link zum Schutz des Urheberrechts bereitgestellt und wahrscheinlich wissen Sie mehr über unbekannte gefährdete Personen Punkte). WordPress ist nur ein Beispiel, tatsächlich ist der Inhalt auf jede PHP-MySQL- oder sogar PHP-gesteuerte Website anwendbar.

Zweitens, unabhängig von der ursprünglichen Frage; Der Linux-Kernel sollte ebenfalls gehärtet sein. Sie können meinen Kern sehen - https://gist.github.com/AbhishekGhosh/9407137

Normalerweise wird PHP nicht wie eine Textdatei im Browser geöffnet, sondern zeigt den Pfad an , name und gibt wahrscheinlich den Hinweis, dass der Serveradministrator nicht sehr erfahren ist und ihn anfälliger macht.

Versuchen Sie nicht, von der Ebene .htaccess aus zu steuern, sondern halten Sie .htaccess so hell wie möglich. Es befindet sich tatsächlich im öffentlichen Verzeichnis ...

Während Ihre Punkte gültig sind, beantwortet keiner von ihnen die gestellte Frage. Das klingt eher nach Kommentaren zu den Antworten anderer Leute.
Ja, ich stimme Ihnen zu - "keiner von ihnen beantwortet die gestellte Frage". Vielleicht war es besser als Kommentar zur Tryse. Danke auch für die Bearbeitung.


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 3.0-Lizenz, unter der er vertrieben wird.
Loading...