2011-06-13 148 views
6

我使用Minify來縮小和緩存我所有的腳本請求。 我只希望我的用戶能夠訪問縮小版本的JavaScript文件。如何阻止直接訪問我的JavaScript文件?

縮小位於www.example.com/min和我的腳本在www.example.com/scripts。我怎樣才能阻止直接訪問doc_root/scripts這是我的無名JavaScript文件所在的地方。我寧願不把它們放在文檔根目錄下,但它是一個選項。

請注意,我使用的是Zend Framework,所以我的應用程序的實際根目錄被轉移到www.example.com/public。一個htaccess文件處理重寫。

+1

什麼問題阻止了直接訪問應該解決? – 2011-06-13 20:05:18

+0

我在未完成的JavaScript代碼中包含註釋(與大多數人一樣)。手動縮減我的代碼來部署並確保我上傳正確的版本是一種痛苦。我使用Minify自動執行此操作,但未經版本化的版本仍未公開。 – 2011-06-13 20:11:02

回答

9

你就不能使用.htaccess文件裏面doc_root/scripts以防止通過HTTP訪問都通過網絡來.js文件?

它不會停止縮小,因爲它提供了間接訪問。

所以在doc_root/scripts/.htaccess,沿

<Files ~ "\.js$"> 
    order allow,deny 
    deny from all 
</Files> 

注意線的東西,在這種情況下,.htaccess文件事項的位置。

+0

謝謝,重寫規則起作用了。我會接受這一次,所以讓我。 – 2011-06-13 20:12:18

4

您實際上無法阻止面向最終用戶的代碼。即使您使用PHP或其他服務器端語言提供服務,並阻止了直接請求,但仍然可以使用多種工具直接讀取它。

你應該記住,此代碼,並留意使用JavaScript的意見,業務知識等

UPDATE:

但是,如果你在談論的代碼並不永遠需要被由最終用戶訪問,您可以像您提到的那樣將其移出服務器根目錄,或者可以阻止目錄(或整個目錄)中的文件。使用Apache的.htaccess很容易。

order deny, allow 
deny from all 

您也可以在.htaccess文件中使用mod_rewrite將源文件重定向到縮小版本。

RewriteEngine On 
RewriteRule /scripts/(.*)$ /min/$1 [L,NC] 
+0

我可以不在乎他們是否在縮小版本上握手。我知道任何足夠認真的人都能理解他們。我只是寧願他們在我的無名代碼中看不到評論。 – 2011-06-13 20:04:26

+0

哦,我誤讀了。你只是想阻止源文件,而不是縮小的文件。我會更新我的答案。 – dtbarne 2011-06-13 20:06:21

+1

然後不要將原始版本保存在公共區域。將它們移動到文檔根目錄之外,如果不能這樣做,請將它們放到「不可猜測的」子目錄中,而不要在任何公共頁面中引用它。 – 2011-06-13 20:06:40

0

取決於您使用的服務器。假設它是Apache,你可以添加到您的.htaccess文件:

<Directory ~ "\scripts"> 
Order allow,deny 
Deny from all 
</Directory> 

或者其他類似的效果..

0

的唯一方法是檢查參照網址,而不是每個人都將它們發送,或發送一個真正的一。換句話說,你不能阻止直接訪問任何真正想要的東西的人。如果請求是直接請求或正在通過<script src=....>類型請求完成,則無法以100%的準確度來確定。

0

爲了讓您的Javascript真正運行,用戶的瀏覽器必須能夠最終讀取它。 因此,沒有真正的方法來「阻止」您的腳本文件夾的訪問權限(確切地說,您可以但可以打破您的網站,因爲瀏覽器不會看到這些文件來運行它們。)

一個解決方案可能是模糊處理,這使得JavaScript代碼難以閱讀/理解,但最終用戶將看到代碼,並通過一些持久的逆向工程,它可以被去混淆。

我見過有人做的另一件事是創建一個「空的」js.html頁面,並將其所有JavaScript插入到頁面中的腳本標記(嵌入的,而不是外部的)中,並從他的主頁中創建ann ajax請求到js.html並嵌入到頁面的底部。這種方式有點不同,但用戶在查看源代碼時不會看到js,除非使用諸如螢火蟲之類的開發工具。

請注意,最後一個選項也可能會導致一些延遲,具體取決於您正在加載的代碼的數量。但這裏的關鍵不是阻止訪問您的腳本,而是讓他們更難獲取/讀取/複製。

編輯:哎呀,誤讀。我認爲在這種情況下,最好的解決方案是使用腳本文件夾中的htaccess文件來拒絕所有訪問

+0

請參閱我的說明。 – 2011-06-13 20:15:35