2013-07-04 143 views
0

initally,我很擔心我的問題標題抱歉,但確實沒有什麼更好的走進了我的腦海....重寫規則不適用於jquery.get()?

我有一個.htaccess文件,做了「一切如常」改寫:

RewriteEngine On 

RewriteCond %{REQUEST_FILENAME} !-d 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteCond %{REQUEST_FILENAME} !-l 

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L] 

這讓我有這樣的網址,例如的可能性(我與XAMPP工作)

localhost/<project>/en/products/electronic/television/ 

所以這個網址是在$ _GET [「網址」]變量,我可以使用它(作爲一個數組)加載公司在我的HMVC模式的ntroller。

爲了不必輸入語言(上面例子中的「en」),我實現了一個自動插入「en」的函數。基本上這意味着下面的url給出了相同的控制器,並分別輸出相同的結果。

localhost/<project>/products/electronic/television/ 

,但現在我不知道,我的JavaScript文件(jQuery的& CO),被趴在文件夾

<project>/lib/js/query/jquery.min.js 

可以簡單地需要這樣的:

<script type="text/javascript" src="/<project>/lib/js/jquery/jquery.js"></script> 

我預計該請求的路徑最終將是這樣的(我在$ _GET [「網址」]變量添加的語言,它會嘗試加載控制器和失敗...

src="/<project>/en/lib/js/jquery/jquery.js" 

那麼,在這種情況下,我會很高興,它的工作原理是這樣的,但它給我的想法來試試這個:

$(document).ready(function() { 
    alert("this is a test"); 
    $.get("/<project>/<config-dir>/<config-file>", function(data) { 
     alert(data); 
    }); 
}); 

瞧,它輸出配置文件。 我認爲這種行爲在高效的服務器上是一樣的,但是在路徑中沒有「/」節點。 我怎樣才能防止這一點,而無需從文檔根移動配置文件?

基本上,我已經確保了XSS攻擊不會(幾乎)是不成功的。 「幾乎」只是因爲沒有100%的安全。

我希望我表達自己:) 感謝您的幫助/建議。

回答

0

好吧,我發現了,問題是什麼,爲什麼我可以訪問配置文件:重寫條件。他們簡單地說,如果所請求的文件名不是目錄或文件或鏈接(?),則以下規則應該生效。

RewriteEngine On 

# RewriteCond %{REQUEST_FILENAME} !-d not a directory 
# RewriteCond %{REQUEST_FILENAME} !-f not a file 
# RewriteCond %{REQUEST_FILENAME} !-l not a link(?) 

RewriteRule ^(.+)$ index.php?url=$1 [QSA,L] 

所以基本上這可以解釋,爲什麼重寫規則沒有對Ajax的請求工作(它沒有正常工作的要求也一樣)

現在我與不允許的訪問問題就解決了。

RewriteRule ^(<dirname>)($|/) - [L] 

從重寫規則我加入這個規則排除某些特定的目錄