我有一個網站(angular)托管在 apache 服務器上,出于安全目的,我想拒絕訪問某些路徑
該網站目前是這樣組織的
index.html
polyfills.js
scripts.js
main.js
package.json
styles.css
assets
configuration
configuration.json
styles
images
我想限制對 configuration.json 、 package.json 的 url 訪問
我試圖在我的 .htaccess 中添加一個規則進行測驗
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /myapp/
RewriteRule ^index.html$ -[L]
RewriteRule ^refresh.html$ -[L]
# added rule
RewriteRule (^|/)configuration.json(/|$) - [F]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.html [L]
</IfModule>
它正確禁止使用路徑 /myapp/assets/configuration/configuration.json 但它也阻止其他資源(如 main.js 和 polyfills.js)使用我不想要的組態檔,因為我無法訪問由于瀏覽器控制臺中的錯誤,該網站不再是
我只想禁止直接 url 訪問
瀏覽器控制臺日志
polyfilles.js : GET http://xxxx/myapp/assets/configuration/configuration.json 403 (Forbidden)
main.js : ERROR () => new Error('Error retrieving configuration file. ' error)
我怎樣才能避免這種情況?
非常感謝
uj5u.com熱心網友回復:
如果需要從客戶端訪問資源(使用 JavaScript),則不能阻止客戶端訪問該資源。因此,如果不限制所有客戶端訪問(例如用戶/密碼身份驗證),您所要求的實際上是不可能的,但是任何經過身份驗證的用戶仍然可以訪問這些檔案。
您可以通過使用自定義 HTTP 請求標頭自定義客戶端請求并檢查此標頭.htaccess并阻止其他方式來防止“隨意”直接訪問。但是,這取決于當前如何呼叫這些檔案,因為它需要更新您的 JS 代碼。
例如,在請求package.json或configuration.json您還發送 HTTP 請求標頭時,如X-Custom-Header: some-value.
在.htaccess您可以阻止沒有此標頭的請求(或者它不是正確的值)。例如:
RewriteCond %{HTTP:X-Custom-Header} !^some-value$
RewriteRule (^|/)(package|configuration)\.json$ - [F]
這只會防止隨意的直接訪問,即。有人將 URL 直接輸入到瀏覽器地址欄中。由于檔案仍然下載到瀏覽器,用戶仍然可以在瀏覽器(開發工具)中讀取檔案。如果有人如此傾向,標題也很容易偽造。因此,這并不能提供任何真正的安全性。
除了發送自定義 HTTP 請求標頭之外,您還可以檢查Referer標頭(如果為此類請求設定了該標頭)。但是,這不太可靠,因為瀏覽器可以配置為不發送Referer標頭。而且,這很容易偽造。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/317894.html
