2009-08-13 6 views
50

Ich mache eine Website, die Menschen ermöglicht, Dateien, HTML-Seiten, etc ... hochladen Jetzt habe ich ein Problem. Ich habe eine Verzeichnisstruktur wie folgt aus:Deaktivieren Sie PHP in Verzeichnis (einschließlich aller Unterverzeichnisse) mit. Htaccess

-/USERS 
    -/DEMO1 
    -/DEMO2 
    -/DEMO3 
    -/etc... (every user has his own direcory here) 
-index.php 
-control_panel.php 
-.htaccess 

Jetzt möchte ich PHP, deaktivieren, aber Server-Seite enthält in den direcories und Unterverzeichnisse innen/USERS

Kann diese (und wie :)) getan werden, ermöglichen ? Danke im Voraus.

BTW, ich benutze WAMP Server

Antwort

98

Versuchen Sie, die engine option in Ihrem zu deaktivieren..htaccess-Datei:

php_flag engine off 
+0

Was passiert, wenn jemand im Webbrowser nach Dateien sucht? Zeigt der Quellcode? –

+8

@Lance Rushing: Der Inhalt der Datei wird an den Client gesendet. Aber warum versuchst du es nicht einfach selbst, um zu sehen, was passiert? – Gumbo

+18

Beachten Sie, dass dies einen Fehler von 500 ergibt, wenn PHP nicht als mod_php installiert ist. Wickeln Sie es in '' ... ''. –

9

Wenn Sie mod_php verwenden, könnten Sie setzen (entweder in einer .htaccess in/USERS oder in httpd.conf für den Directory-Benutzer)

RemoveHandler .php 

oder

RemoveType .php 

(je nachdem, ob PHP aktiviert ist AddHandler oder AddType verwenden)

PHP-Dateien, die aus einem anderen Verzeichnis ausgeführt werden, können weiterhin Dateien in/USERS enthalten (vorausgesetzt, es gibt keine open_basedir-Einschränkung), da dies nicht über Apache erfolgt. Wenn auf eine PHP-Datei mit Apache zugegriffen wird, wird sie als reiner Text serverd.

bearbeiten

Lance Rushing-Lösung nur die Verweigerung des Zugangs zu den Akten ist wahrscheinlich besser

+3

Ich benutze mod_php, aber das funktioniert nicht, sorry. –

39

Um den gesamten Zugriff auf Unter dirs zu deaktivieren (sicherste) verwenden:

<Directory full-path-to/USERS> 
    Order Deny,Allow 
    Deny from All 
</Directory> 

Wenn Sie möchten, Um zu verhindern, dass nur PHP-Dateien direkt geliefert werden, tun Sie Folgendes:

1 - Stellen Sie sicher, dass Sie wissen, welche Datei ex Spannungen, die der Server als PHP erkennt (und den Leuten nicht erlauben, in htaccess zu überschreiben). Einer meiner Server ist eingestellt auf:

# Example of existing recognized extenstions: 
AddType application/x-httpd-php .php .phtml .php3 

2 - Basierend auf die Erweiterungen einen regulären Ausdruck Filesmatch (oder Location)

<Directory full-path-to/USERS> 
    <FilesMatch "(?i)\.(php|php3?|phtml)$"> 
      Order Deny,Allow 
      Deny from All 
    </FilesMatch> 
</Directory> 

Oder verwenden Location zu PHP-Dateien hinzufügen übereinstimmen (I bevorzugen die obigen Dateien nähern)

<LocationMatch "/USERS/.*(?i)\.(php3?|phtml)$"> 
    Order Deny,Allow 
    Deny from All 
</LocationMatch> 
+1

"nicht zulassen, dass Menschen in htaccess überschreiben", ja, das ist ein sehr guter. Die gesamte Arbeit in Ihrem Htaccess wird verschwendet, wenn die Leute es einfach mit einer lokalen Htaccess-Datei überschreiben können. Ihre Demo-Umgebung hat wahrscheinlich keine Verwendung für PHP-Dateien, also lassen Sie sie am besten gar nicht erstellen oder bedienen (nicht einmal Quelltext-Ansicht), einfach komplett blockieren (einschließlich htaccess-Dateien) – Krinkle

+0

Excellent comment, hatte ich übersehen die Idee, dass Leute eine ".htaccess" Datei hochladen könnten. – bart

+1

Dies funktioniert nicht in einer .htaccess-Datei (Fehler 500). Es sollte dem vhost von apache conf hinzugefügt werden. – NicolasBernier

1

Dies könnte zu viel des Guten - aber vorsichtig sein, etwas zu tun, die auf der Erweiterung von PHP-Dateien vertraut sein .php - was ist, wenn jemand später kommt und Handler für .php4 oder sogar .html hinzufügt, so dass sie von PHP gehandhabt werden. Es könnte besser sein, Dateien aus diesen Verzeichnissen von einer anderen Instanz von Apache oder etwas anderem zu liefern, das nur statischen Inhalt liefert.

+0

Menschen können nicht bearbeiten oder hochladen .htaccess-Dateien. Natürlich –

+5

@Nevermind - Ich spreche nicht über Ihre Benutzer. Ich spreche von dir oder einem anderen sys-admin 2 Jahre später. –

7

Dies wird den Source-Code anzeigen, anstatt ihn auszuführen:

<VirtualHost *> 
    ServerName sourcecode.testserver.me 
    DocumentRoot /var/www/example 
    AddType text/plain php 
</VirtualHost> 

habe ich es einmal andere Mitarbeiter zu ermöglichen, aus dem lokalen Netzwerk Lesezugriff auf den Quellcode zu haben (nur eine schnelle und schmutzige Alternative).

WARNUNG!:

Wie Dan vor einiger Zeit darauf hingewiesen hat, sollte diese Methode niemals in der Produktion verwendet werden. Bitte folgen Sie der akzeptierten Antwort, da sie jeden Versuch blockiert, PHP-Dateien auszuführen oder anzuzeigen.

Wenn Sie möchten, dass Benutzer PHP-Dateien zu teilen (und andere lassen den Quellcode anzuzeigen), es gibt bessere Möglichkeiten, es zu tun sind, wie git, Wikis usw.

Diese Methode sollte vermieden werden! (Sie haben es hier gewarnt Links zu Bildungszwecken.)

+1

Massives Sicherheitsloch! Tun Sie das nicht in der Produktion! –

+0

@DanGarland Bitte sagen Sie uns wie? \ –

+0

@AbdulJabbarWebBestow Der Grund ist, weil jeder in der Lage wäre, den Quellcode zu sehen, anstatt ihn auszuführen. Wenn diese Codes vertrauliche Informationen enthalten (z. B. Verbindungskennwörter), können diese Informationen als kompromittiert betrachtet werden. – lepe

-2

Try this:

<FilesMatch "\.((php[0-9]?)|p?html?|pl|sh|java|cpp|c|h|js|rc)$"> 
    SetHandler None 
    </FilesMatch> 
+2

Nur um Sie wissen zu lassen, ist dies eine schreckliche Lösung. Vertrauen Sie niemals Benutzereingaben. Wenn Sie einfach die Dateierweiterung überprüfen, geraten Sie in Schwierigkeiten. –

+0

Zusätzlich funktioniert es nicht; Ich kann immer noch PHP-Skripte ausführen. –

+1

Plus, es ist nicht einmal eine gut geschriebene Antwort. – JakeParis

7
<Directory /your/directorypath/> 
    php_admin_value engine Off 
</Directory> 
+5

Bitte berücksichtigen Sie einige zusätzliche Kommentare. –

+2

Es funktioniert einfach. Das sind alle Kommentare – Tebe

0

Keine dieser Antworten sind für mich arbeiten (entweder zum Erzeugen eines 500-Fehler oder nichts zu tun). Das liegt vermutlich daran, dass ich auf einem gehosteten Server arbeite, auf dem ich keinen Zugriff auf die Apache-Konfiguration habe.

Aber für mich gearbeitet:

RewriteRule ^.*\.php$ - [F,L]

Diese Linie eine 403 Forbidden Fehler für jede URL generieren, die mit .php endet und endet in diesem Unterverzeichnis auf.

@Oussama führen Sie mich in die richtige Richtung here, dank ihm.

Verwandte Themen