
Ich habe meine Header-, Footer- und anderen PHP-Dateien, die Ajax-Anfragen verarbeiten, in dem /include/
Ordner.
Für eine statische Website wird die nginx-Standarddatei auf
location ^~ /include/ { deny all; }
Und als jemand dorthin ging, www.mysite.com/include/header.php
kam ein403 Forbidden
aber jetzt, da ich JQuery-Ajax-Aufrufe an Dateien im /include/
Ordner verwende, wenn ich dies einstelle =>
location ^~ /include/ { deny all; }
, kein Ajax-Zeug wie Speichern oder Melden funktioniert.
gibt es eine Möglichkeit, wie ichden Zugriff auf die darin enthaltenen Dateien verweigernden /include/
Ordner zujeder andereaber mach esnur für die Webroot-Dateien zugänglich?
Ich habe Folgendes ausprobiert:
location ^~ /include/ { allow 127.0.0.1; deny all; }
aber das funktioniert nicht.
location ^~ /include/ { allow <my server's ip>; deny all; }
aber das funktioniert nicht.
Ich habe den SSH-Port von 22 auf beispielsweise 123 geändert. Soll ich Folgendes eingeben:
location ^~ /include/ { allow 127.0.0.1:123; deny all; }
stattdessen?
Habe auch auf ein Tutorial zum Beenden von Hotlinking verwiesen von:http://www.nginxtips.com/how-to-stop-image-hotlinking-on-nginx/
Demnach habe ich versucht,
location ~ .(gif|png|jpe?g)$ {
valid_referers none blocked mysite.com *.mysite.com;
if ($invalid_referer) {
return 403;
}
}
um das Hotlinking von Bildern zu verhindern (hat wohl nicht funktioniert) und
location /include/ {
valid_referers none blocked mysite.com *.mysite.com;
if ($invalid_referer) {
return 403;
}
}
um den Zugriff auf den /include/
Ordner zu verhindern.
keiner von ihnen hat funktioniert, und ja, ich habe mysite durch den richtigen Namen meiner Website ersetzt
Ich habe auch versucht, Folgendes zu tun:
location ^~ /include/ {
valid_referers none blocked mysite.com *.mysite.com;
if ($invalid_referer) {
return 403;
}
}
Das Hinzufügen führte jedoch ^~
dazu, dass die Seite @ www.mysite.com/include/header.php
„header.php“ in diesem Fall heruntergeladen wurde, wenn sie im Browser aufgerufen wurde.
Ich verwende keine CMS, sondern nur einfache PHP-Dateien mit CSS und JS, einschließlich der von Bootstap. (nginx 1.4.6, mysql, php5-fpm-Stack)
Alle Vorschläge sind sehr willkommen.
Antwort1
Die AJAX-Aufrufe werden nicht vom Server, sondern vom Browser des Clients durchgeführt. Wenn Sie also nur Ihrem Server Zugriff auf diesen Ordner gewähren, ist das nicht das gewünschte Ergebnis.
Mein Vorschlag wäre, alle per AJAX aufgerufenen Dateien in einen separaten Ordner zu verschieben ( vielleicht) und das, was Sie für den Ordner /ajax
konfiguriert haben, zu belassen .include
Theoretisch /include
sollten die darin enthaltenen Dateien niemals direkt von einem Browser aufgerufen werden, sondern werden wahrscheinlich (stellen Sie sich das vor!) von Ihrer Skriptsprache eingebunden. Aus diesem Grund sollten die per AJAX angeforderten Dateien wahrscheinlich in einem eigenen Ordner abgelegt werden.
Alternativ könnten Sie die AJAX-Anfragen möglicherweise in den /include
Ordner umschreiben, aber ich bin nicht sicher, ob das deny
in solchen Fällen anwendbar ist.
Antwort2
Sie können den Zugriff basierend auf dem X-Requested-With: XMLHttpRequest
Header erlauben, den die meisten Javascript-Frameworks ihren AJAX-Anfragen hinzufügen. Beachten Sie jedoch, dass jeder eine solche Anfrage fälschen kann. Sie können nicht sicher sein, dass es sich tatsächlich um eine AJAX-Anfrage handelt, die von Ihrer Webanwendung stammt, und nicht um jemanden, der die AJAX-Anfrage manuell repliziert, indem er curl
oder ähnliches verwendet.