簡體   English   中英

使用htaccess拒絕ajax文件訪問

[英]Deny ajax file access using htaccess

我只使用ajax使用了一些腳本,我不希望用戶直接從瀏覽器運行這些腳本。 我使用jQuery進行所有ajax調用,並將所有ajax文件保存在名為ajax的文件夾中。

所以,我希望創建一個htaccess文件來檢查ajax請求(HTTP_X_REQUESTED_WITH)並拒絕該文件夾中的所有其他請求。 (我知道http標頭可以偽造,但我想不出更好的解決方案)。 我試過這個:

ReWriteCond%{HTTP_X_REQUESTED_WITH} ^ $
ReWriteCond%{SERVER_URL} ^ / ajax / .php $
ReWriteRule ^。* $ - [F]

但是,它不起作用。 我做錯了什么? 有沒有其他方法可以達到類似的結果。 (我不想在每個腳本中檢查標題)。

壞:阿帕奇:-(

X-Requested-With不是標准的HTTP標頭

您根本無法在apache中讀取它(無論是ReWriteCond %{HTTP_X_REQUESTED_WITH}還是%{HTTP:X-Requested-With} ),因此無法在.htaccess或同一位置檢查它。 :-(

丑陋的:腳本:-(

它只是在腳本中可訪問(例如php),但是你說你不希望因為文件數量而在所有腳本中都包含一個php文件。

好:auto_prepend_file :-)

  • 但是......有一個簡單的方法可以解決它:-)

auto_prepend_file指定在主文件之前自動解析的文件的名稱。 您可以使用它自動包含“檢查器”腳本。

所以在ajax文件夾中創建一個.htaccess

php_value auto_prepend_file check.php

並根據需要創建check.php

<?
if( !@$_SERVER["HTTP_X_REQUESTED_WITH"] ){
        header('HTTP/1.1 403 Forbidden');
        exit;
}
?>

您可以根據需要自定義它。

我假設您在ajax目錄中擁有所有AJAX腳本,因為您在非工作示例中引用了^ / ajax / .php $。

在此文件夾/ajax/放置一個包含此內容的.htaccess文件:

SetEnvIfNoCase X-Requested-With XMLHttpRequest ajax
Order Deny,Allow
Deny from all
Allow from env=ajax

這樣做是在沒有XMLHttpRequest標頭的情況下拒絕任何請求。

只有少數預定義的HTTP_ *變量映射到可以在RewriteCond中使用的HTTP頭。 對於任何其他HTTP標頭,您需要使用%{HTTP:header}變量。

只是改變

ReWriteCond %{HTTP_X_REQUESTED_WITH} ^$

至:

ReWriteCond %{HTTP:X-Requested-With} ^$

只需檢查if($_SERVER['HTTP_X_REQUESTED_WITH']=='XMLHttpRequest'){在文檔的開頭,如果未設置,則不返回任何內容。

編輯原因如下: http//github.com/jquery/jquery/blob/master/src/ajax.js#L370

編輯2我的不好,只需再次閱讀你的帖子。 您也可以讓網絡無法訪問文件夾,然后只有一個標准的ajax.php文件,其中include('./private/scripts.php')因為您的服務器仍然可以訪問它,但沒有人會能夠從他們的瀏覽器查看。

使用.htaccess的另一種方法是使用$ _SERVER ['HTTP_REFERER']變量來測試是從頁面訪問腳本,而不是從其他站點訪問等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM