是否可以区分<img src='http://example.com/xxx.jpg'>
中的图像嵌入式HTTP请求和http://example.com/xxx.jpg
中的直接图像访问?
我使用HTTP_REFERER
进行htaccess重定向,以防来自我的域外的请求为图片添加水符号。只有在直接访问的情况下,我还要显示一个带有一些提示的HTML页面。
我使用了HTTP_ACCEPT
。当它以image/
开头时,它就是一个嵌入式访问。否则它是直接访问。这不再起作用了。我总是得到*/*
。
任何想法如何实现(在PHP中)?
谢谢!
答案 0 :(得分:0)
有一种方法应该适用于大多数现代浏览器,但没有隔离区。因为如果请求资源,浏览器倾向于发送称为“referer”的HTTP头,我们可以根据此选择。因此,如果引用者等于您的域名,那么我们就没有直接访问权限。
# Check if the URI is a physical file
RewriteCond %{REQUEST_URI} -f
# Check if the file has any kind off Image extension like:
# .gif .jpg .jpeg .tif .tiff .png .svg .bmp (case insensitive => [NC])
RewriteCond %{REQUEST_URI} \.(gif|jpe?g|tiff?|png|svg|bmp)$ [NC]
# Check if referer is empty
RewriteCond "%{HTTP_REFERER}" ^$ [NC]
# Direct access
RewiteRule ^.*$ /direct_access.html [L]
# Check if the URI is a physical file
RewriteCond %{REQUEST_URI} -f
# Check if the file has any kind off Image extension like:
# .gif .jpg .jpeg .tif .tiff .png .svg .bmp (case insensitive => [NC])
RewriteCond %{REQUEST_URI} \.(gif|jpe?g|tiff?|png|svg|bmp)$ [NC]
# Check if referer is not own domain
RewriteCond "%{HTTP_REFERER}" !^https?://(www\.)?example\.com [NC]
# External access
RewiteRule ^.*$ /image_water_sign.php [L]
这适用于www和非www以及http和https,只需将example\.com
更改为例如domain\.org
RewiteRules就是例子。
只需一个备注:如果您想保护图像免受直接下载,这绝对不是绝对保护。使用此数据伪造HTTP标头非常简单。