允许显示和/或执行 Web 文件,但不允许使用 htaccess 直接进行 url 访问

允许显示和/或执行 Web 文件,但不允许使用 htaccess 直接进行 url 访问

我想要实现的是:

我希望能够仅在我的域上的浏览器上显示 ( mp4| jpg| ico) 文件类型并执行 ( js| ) 文件类型,但我不希望他们通过在浏览器地址栏上键入 URL 来直接访问这些文件。css

我所期望和所做的是

熟悉 PHP 后$_SERVER['HTTP_REFERER'],我得到一个像这样的 URLhttp://域名.xyz/main.php但我不知道是否同样如此.htaccess。因为 with .htaccess, the HTTP_REFERER, 使用像这样的正则表达式模式^https?://(www.)?domainname\.xyz/.*$,但是如果我使用 URL 的模式,https?://(www.)?domainname\.xyz/main.php我可以在 上硬编码该确切的 URL .htaccess。这样的 URL 会导致错误,因此我遵循站点中的代码并将其合并到我的脚本中。我不是 htaccess 正则表达式方面的专家。

因此,我将下面的 .htaccess 作为研究结果并从各个站点进行跟踪:

 RewriteEngine On
 RewriteCond %{HTTP_REFERER} !^https?://(www.)?domainname\.xyz/.*$ [NC]
 RewriteRule \.(jpg|js|css|mp4)$ - [NC,F,L]

我也尝试使用以下来自各个站点的代码:

SetEnvIf Referer "!^https?://(www.)?domainname\.xyz/.*$" localreferer
<FilesMatch "\.(jpg|js|css|mp4)$">
    Require env localreferer
</FilesMatch>

上面的代码当前发生的情况是:

使用上述.htaccess脚本,浏览器上仅mp4显示文件类型,无法通过浏览器地址栏上的 URL 直接访问并显示403 Forbidden错误。

所有其他文件类型都在浏览器上显示/执行,也可以使用 URL 在地址栏上直接访问它们。

帮助

我在这方面寻求您的帮助,因为我不是 htaccess、正则表达式方面的专家。我已经研究了好几天了,仍然没有解决。在您的帮助下,我的知识将会增长。

答案1

你想要的东西是不可能的。要执行 JavaScript 程序或应用 CSS 格式文件,您的浏览器必须下载这些文件。那是确切地与打开浏览器 URL 栏中输入的 URL 的机制相同。

另外,即使获取数据的方法不同:浏览器以某种方式获取数据。那一刻它就在您的用户的计算机中,因此不受您的服务器的控制。

您将不得不面对这样一个事实:网站、嵌入式 JS 和 CSS 是在用户计算机上运行的程序。为此,他们从您的服务器获取这些东西。没有办法解决这个问题。

答案2

为了纠正您的解决方案的开始路径,我的第一个猜测是更改您的正则表达式:

\.(jpg|js|css|mp4)($|\?|&)

由于缺乏信息(请参阅我的最后评论这里)我只能猜测将请求的真实 URI。

您最好选择FileMatch- 变体。


但请注意“通过引用者阻止”并不是真正的安全。浏览器或其插件可以自动操作引用者: 在此输入图像描述

如果你期望绝对的保护,我只能说马库斯·穆勒拉蒂尔绝对保护是不可能的,这是正确的。您只能加大力度提取文件的真实URI,或者通过用户访问控制或加密解决方案(即DRM)来限制受众。

相关内容