it-swarm.com.de

Verweigern Sie den direkten Zugriff auf einen Ordner und eine Datei mit htaccess

Hier ist das Szenario:

  • Es gibt eine index.php - Datei im Stammordner
  • einige Dateien sind in index.php enthalten, die sich im Ordner includes befinden.
  • 1 andere Datei (submit.php) Befindet sich im Stammordner für die Formularübermittlungsaktion.

Ich möchte den direkten Benutzerzugriff auf die Dateien im Ordner includes durch htaccess einschränken. auch für submit.php. Aber include funktioniert für die index.php - Datei. Wenn der Benutzer beispielsweise www.domain.com/includes/somepage.php Eingibt, wird dies eingeschränkt (möglicherweise wird auf eine Fehlerseite umgeleitet).

125
Imrul.H

Ich würde den includes -Ordner einfach aus dem Webstamm verschieben, aber wenn Sie den direkten Zugriff auf den gesamten includes -Ordner blockieren möchten, können Sie einen .htaccess Datei in diesem Ordner, die nur enthält:

deny from all

Auf diese Weise können Sie keine Datei aus diesem Ordner öffnen, aber Sie können sie problemlos in PHP einbinden.

257
jeroen

Dies ist eine reine mod_rewrite Lösung:

RewriteRule ^(includes/|submit\.php) - [F,L,NC]

Dies zeigt einen verbotenen Fehler an, der verwendet werden kann, wenn der URI entweder /includes/ Oder /submit.php Enthält.

53
anubhava

Es ist möglich, eine Files-Direktive zu verwenden und den Zugriff auf alle Dateien zu verweigern. Verwenden Sie sie dann erneut, um die Dateien festzulegen, auf die zugegriffen werden kann:

<Files ~ "^.*">
  Deny from all
</Files>

<Files ~ "^index\.php|css|js|.*\.png|.*\.jpg|.*\.gif">
  Allow from all
</Files>
23
luke1985

1 Liner mod_alias basierte Lösung:

RedirectMatch 403 ^/folder/file.php$

Dies zeigt einen verbotenen Fehler für /folder/file.php an

13
starkeen

Wenn ich das richtig verstehe, möchten Sie nur den Zugriff auf den Includes-Ordner verweigern?

Ein .htaccess mit der Anweisung 'DENY FROM ALL' im Includes-Ordner würde den Trick ausführen.

9
mainegreen

Ihr Q besteht aus zwei Teilen: Die Lösungen von Jeroen und Anubhava funktionieren für Teil I - den Zugriff auf/Includes verweigern. Anubhavas Werke auch für Teil II. Ich bevorzuge letzteres, weil ich ohnehin einen DOCROOT/.htaccess Verwende und dies alles in einer Datei festhält.

Was ich jedoch nicht diskutieren wollte, ist das Konzept der "Verweigerung des Zugriffs auf submit.php". Wenn Sie submit.php Nicht verwenden möchten, warum haben Sie es dann überhaupt in DOCROOT? Ich vermute, dass die Antwort hier darin besteht, dass Sie sie in einigen Formularen als Aktionsziel verwenden und sie nur dann abfeuern möchten, wenn das Formular gesendet wird, und nicht direkt, z. von einem Spambot.

Wenn dies zutrifft, können Sie Anubhavas Teil II nicht verwenden, da dies dazu führt, dass Ihr Formular fehlschlägt. Was Sie hier tun können, ist (i) mit dem .htaccess - Häkchen, um sicherzustellen, dass der Referrer Ihre eigene Indexseite war:

RewriteCond %{HTTP_REFERRER} !=HTTP://www.domain.com/index.php   [NC]
RewriteRule ^submit\.php$    -                                   [F]

Und (ii) in Ihrem Formulargenerator PHP= index.php enthalten einige ausgeblendete Felder für einen Zeitstempel und eine Validierung. Die Validierung könnte beispielsweise die ersten 10 Zeichen eines MD5 des Zeitstempels und einige sein Internes Geheimnis: Bei der Verarbeitung der Übermittlung können Sie dann (i) überprüfen, ob der Zeitstempel und die Validierung übereinstimmen, und (ii) ob der Zeitstempel innerhalb von beispielsweise 15 Minuten von der aktuellen Zeit liegt.

Auf diese Weise können Sie Spam verhindern, da ein Spammer nur dann ein gültiges Zeitstempel-/Validierungspaar erhalten kann, wenn er ein Formular parst. Dieses Scrape hat jedoch nur eine Lebensdauer von 15 Minuten.

8
TerryE

Abhängig von möglichen anderen Optionen, die auf einer höheren Ebene festgelegt wurden, müssen Sie möglicherweise Folgendes in Ihre .htaccess-Datei in Ihrem Includes-Verzeichnis einfügen:

Satisfy all
Order deny,allow
Deny from all

Ich bin darauf gestoßen, als das obere Verzeichnis die Basisauthentifizierung einschließlich der folgenden Zeile definierte:

Satisfy any

Dies verhinderte, dass meine Ablehnung wirksam wurde, da die Benutzer authentifiziert wurden.

6
Keith

Sie können den folgenden Befehl zur Datei .htaccess Hinzufügen

Deny from all
ErrorDocument 403 "nothing is here"

Bei nicht autorisiertem Zugriff wird die Meldung "Nichts ist hier" angezeigt.

Wenn Sie durch einen Fehlercode zu einer bestimmten Seite umleiten möchten, können Sie einen Befehl wie folgt definieren:

ErrorDocument 404 "/errors/404.html"

Es wird zu /errors/404.html Umgeleitet und der benutzerdefinierte Bildschirm "Seite nicht gefunden" wird angezeigt.

0
user1324491