如何使用.htaccess允许文件访问同一目录下的图像,但拒绝其他人直接看到图像?

ktecyv1j  于 2023-03-30  发布在  其他
关注(0)|答案(1)|浏览(127)

我有一个名为display.html的文件,我想用它来显示图像。但是,我不想让其他人通过在URL中键入图像的名称来直接访问图像。因此,我使用.htaccess来拒绝访问,但不知何故它也拒绝了display.html。我有下面的.htaccess代码:

# Prevent direct access to images
Options -Indexes

# Allow display.html to access images
<Files "display.html">
    Order allow,deny
    Allow from all
</Files>

# Allow access to images for display.html only
<FilesMatch "\.(jpg|jpeg|png|gif)$">
    Order deny,allow
    Deny from all
    <Files "display.html">
        Order allow,deny
        Allow from all
    </Files>
</FilesMatch>

在这段代码中,它不应该允许display.html访问所有其他的jpg和jpeg文件吗?但它显示403错误时,试图加载图像。我如何修改.htaccess文件,使其工作?感谢您的任何帮助。

7xzttuei

7xzttuei1#

我有一个名为display.html的文件,我想用它来显示图像。
假设在这个HTML文件中,您只是使用img元素嵌入图像?在这种情况下,您不能简单地在.htaccess中阻止这些图像,这会阻止对这些图像的所有HTTP请求。
问题不在于display.html本身被阻止,而在于嵌入在display.html中的图像被阻止。
您唯一的选择是在请求这些图像时检查Referer(一个“r”)HTTP请求头。Referer * 应该******包含请求图像的URL。
例如,在.htaccess中使用mod_rewrite:

RewriteEngine On

RewriteCond %{HTTP_REFERER} !^https://www.example.com/display\.html$
RewriteRule \.(jpe?g|png|gif)$ - [F]

上面的代码会阻止(403 Forbidden)任何对指定的镜像扩展名的请求,其中HTTP Referer头是 nothttps://www.example.com/display.html。这基本上是一种“防盗链”形式。

*****但是,这并不一定可靠。Referer头是由用户/浏览器发送的。可能用户已经抑制了Referer头的发送(出于“安全”考虑),因此不会为这些用户显示图像。因此,Referer头也可以伪造(因此,如果这是一个问题,仍然可以从外部源下载图像)。

# Allow display.html to access images
<Files "display.html">
    Order allow,deny
    Allow from all
</Files>

这允许访问display.html本身。但这不是问题所在。display.html已经可以访问了。问题是您阻止了对图像的所有访问,而不管它们是从“from”访问的。“from”是“referrer”(由Referer HTTP请求头表示)。

相关问题