区分嵌入式“<img src="http://example.com/xxx.jpg"/>”并指向“http://example.com/xxx.jpg”?

时间:2017-10-01 11:29:06

标签: image .htaccess

是否可以区分<img src='http://example.com/xxx.jpg'>中的图像嵌入式HTTP请求和http://example.com/xxx.jpg中的直接图像访问?

我使用HTTP_REFERER进行htaccess重定向,以防来自我的域外的请求为图片添加水符号。只有在直接访问的情况下,我还要显示一个带有一些提示的HTML页面。

我使用了HTTP_ACCEPT。当它以image/开头时,它就是一个嵌入式访问。否则它是直接访问。这不再起作用了。我总是得到*/*

任何想法如何实现(在PHP中)?

谢谢!

1 个答案:

答案 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标头非常简单。