限制浏览某些资源

restrict browsing to some resources

我有一个网站 (angular) 托管在 apache 服务器上,出于安全目的我想拒绝访问某些路径

网站目前是这样组织的

index.html
polyfills.js
scripts.js
main.js
package.json
styles.css
assets
     configuration
                  configuration.json
     styles
                  images

我想限制 url 访问 configuration.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>

它正确地禁止使用路径 /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)  

我怎样才能避免这种情况?

非常感谢

如果资源需要从客户端访问(使用 JavaScript),则不能阻止客户端访问资源。因此,如果不限制所有客户端访问(例如 user/password 身份验证),您的要求实际上是不可能的,但是任何经过身份验证的用户仍然可以访问这些文件。

您可以通过使用自定义 HTTP 请求 header 自定义 client-side 请求来防止“随意”直接访问,并在 .htaccess 中检查此 header,否则阻止.但是,这取决于当前调用这些文件的方式,因为它需要更新您的 JS 代码。

例如,在请求 package.jsonconfiguration.json 时,您还发送了一个 HTTP 请求 header,例如 X-Custom-Header: some-value

.htaccess 中,您可以阻止没有此 header 的请求(或者它不是正确的值)。例如:

RewriteCond %{HTTP:X-Custom-Header} !^some-value$
RewriteRule (^|/)(package|configuration)\.json$ - [F]

这只会阻止随意的直接访问,即。有人直接在浏览器地址栏中输入 URL。由于文件仍然下载到浏览器,用户仍然可以在浏览器(开发工具)中读取文件。如果有人愿意,header 也可以很容易地伪造。所以,这并不能提供任何真正的安全。

而不是发送自定义 HTTP 请求 header,您或许可以检查 Referer header(如果为此类请求设置了此项)。但是,这不太可靠,因为可以将浏览器配置为不发送 Referer header。而且,这很容易被伪造。