Hier ist das Szenario:
index.php
- Datei im Stammordnerindex.php
enthalten, die sich im Ordner includes
befinden.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).
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.
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.
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>
1 Liner mod_alias basierte Lösung:
RedirectMatch 403 ^/folder/file.php$
Dies zeigt einen verbotenen Fehler für /folder/file.php an
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.
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.
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.
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.