我的.htaccess中有以下规则,以防止直接访问这些文件扩展名。
loadOfAreas01 retrievals storages - limitRetrieval limitGoodsin limitTotal
19 1 18 - 30 36 49
19 1 18 - 30 36 49
适用于Chrome,Firefox和Safari。对于Internet Explorer 11和Edge,即使它们不是直接访问,它也会阻止所有这些文件类型。例如。如果页面包含image.png,则不会显示该图像。
请注意,它与(htaccess) How to prevent a file from DIRECT URL ACCESS?相同,因为直接访问不仅适用于IE 11和Edge,而是适用于其他浏览器。
答案 0 :(得分:1)
作为stated by Anubhava,这似乎是因为某些浏览器默认情况下不支持提供HTTP_REFERER
标头值。
阅读这个问题(下面的链接列表)似乎是在网络最佳实践的裂缝之间滑落的;值HTTP_REFERER
为insecure and easily forged(因此各种浏览器的最新版本不包括它)。
除此之外,它似乎是检查(惊讶!)引用页面对HTML标头的调用的唯一方法。
此是基于不同浏览器更改.htaccess
行为的原因。
我知道有几种解决方案,既不是完美的,也可能需要相当多的重新编码。
Edge的问题是没有给出HTTP_REFERER
值,因此如果此值为空,只需使用mod_rewrite .htaccess
标记即可在OR
中允许:
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [OR]
RewriteCond %{HTTP_REFERER} !^https://(www\.)?mydomain\.com(.*)?$ [NC]
RewriteRule \.(txt|pdf|jpg|png|svg)$ - [F]
这会添加一个空/空HTTP_REFERER
,然后是OR
逻辑门的检查,然后我将前两个规则汇总为单个域规则加上可选的文件路径字符串强>
这方面的优点是Edge [应该]工作,但是也不允许任何不提供HTTP_REFERER
值的内容(例如新的浏览器窗口)。 Read more about a better variation on this approach here
.htaccess
该网站已被访问并做出相应反应。给cookie一个很短的时间框架,你必须按照自己的方式构建cookie设置系统。 或强>
.jpg
文件等。这将满足你的需要(禁止直接访问)但是将是一项重要的工作开销。 例如,如果您的<img src='/image.jpg?x=47457'>
中有一个文件,而此image.jpg
实际上是一个调用47457
引用的JPG图像的PHP文件...
mod_rewrite
对此进行扩展,以便对jpg文件的任何调用都可以重定向到imageprocessing.php?input=image.jpg
,然后PHP代码可以检查是否存在有效的cookie /会话数据在加载和输出适当引用的文件之前...... 无论如何(b)和(c)很容易长而复杂,但可以提供最可靠的结果。