
我的頁首、頁尾和其他處理 ajax 請求的 php 檔案都在/include/
資料夾中。
對於靜態網站,用於將 nginx 預設檔設定為
location ^~ /include/ { deny all; }
當有人去www.mysite.com/include/header.php
它返回一個403 Forbidden
但現在,由於我使用 jquery ajax 呼叫資料/include/
夾內的文件,如果我設定此 =>
location ^~ /include/ { deny all; }
,沒有像儲存或報告這樣的ajax 功能。
有什麼方法可以讓我拒絕存取裡面的文件資料/include/
夾到其他所有人但做到了僅可存取 webroot 文件?
我嘗試過這些:
location ^~ /include/ { allow 127.0.0.1; deny all; }
但這行不通。
location ^~ /include/ { allow <my server's ip>; deny all; }
但這行不通。
我已將 ssh 連接埠從 22 更改為 123;我應該輸入:
location ^~ /include/ { allow 127.0.0.1:123; deny all; }
反而?
也參考了一個停止熱連結的教學:http://www.nginxtips.com/how-to-stop-image-hotlinking-on-nginx/
據此:我嘗試過,
location ~ .(gif|png|jpe?g)$ {
valid_referers none blocked mysite.com *.mysite.com;
if ($invalid_referer) {
return 403;
}
}
防止圖像熱鏈接(我猜沒有用。)和
location /include/ {
valid_referers none blocked mysite.com *.mysite.com;
if ($invalid_referer) {
return 403;
}
}
以阻止存取該/include/
資料夾。
它們都不起作用,是的,我將 mysite 替換為我網站的真實名稱
我也嘗試這樣做:
location ^~ /include/ {
valid_referers none blocked mysite.com *.mysite.com;
if ($invalid_referer) {
return 403;
}
}
但是,在這種情況下,添加^~
導致頁面@ 'header.php'被下載;www.mysite.com/include/header.php
在瀏覽器中訪問它時。
我沒有使用任何 CMS,只是使用 css 和 js 的普通 php 文件,包括 bootstap 的文件。 (nginx 1.4.6、mysql、php5-fpm 堆疊)
非常感謝任何建議。
答案1
伺服器不是進行 AJAX 呼叫的伺服器,而是客戶端的瀏覽器,因此僅允許伺服器存取該資料夾不會執行您期望的操作。
我的建議是將透過 AJAX 呼叫的所有檔案移至一個單獨的資料夾(/ajax
也許),並保留您為該include
資料夾配置的內容。
理論上,其中的檔案/include
不應該被瀏覽器直接調用,但很可能被腳本語言包含(想像一下!)。這就是為什麼 AJAX 請求的檔案應該放在它們自己的資料夾中。
作為替代方案,您可以重寫對/include
資料夾的 AJAX 請求,但我不確定這是否deny
適用於這種情況。
答案2
您可以根據X-Requested-With: XMLHttpRequest
大多數Javascript 框架添加到其AJAX 請求中的標頭來允許訪問,但請注意,任何人都可以偽造此類請求- 您無法確定它確實是來自您的Web 應用程式的AJAX 請求,而不是複製該AJAX 請求的人手動、使用curl
或類似方式。