我有一个网站(angular)托管在apache服务器上,我想拒绝访问一些路径的安全目的
网站目前是这样组织的
index.html
polyfills.js
scripts.js
main.js
package.json
styles.css
assets
configuration
configuration.json
styles
images
我想限制url访问配置。Json, package.json
我试图在我的。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>
正确禁止使用path/myapp/assets/configuration/configuration。但它也阻止了其他资源(如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)
如何避免这种情况?
Thank you very much
如果需要从客户端(使用JavaScript)访问资源,则不能阻止客户端访问资源。因此,如果不限制所有客户端访问,您所要求的是不可能的。用户/密码身份验证),但是任何身份验证的用户仍然可以访问这些文件。
你可以避免"casual"通过使用自定义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
头配置。再说一遍,这很容易伪造。