拒绝直接访问但允许常规html

时间:2012-05-11 17:24:18

标签: html .htaccess permissions

我在.htaccess目录中有以下upload

order allow,deny
deny from all

我想允许<img src="upload/image.png" />但是获得forbbiden错误(403)。

我如何拒绝直接访问但允许html“包含”(常规HTML)?

3 个答案:

答案 0 :(得分:1)

你需要mod_rewrite,

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?mydomain.com/.*$ [NC]
RewriteRule \.(gif|jpg|js|css)$ - [F]

请务必将“mydomain.com”替换为您自己的。

答案 1 :(得分:1)

你不能(可靠地)。

无论是直接查看还是<img>标记,浏览器仍向http://yoursite.example.com/upload/image.png发出请求,就服务器而言,这两个请求基本相同。

现在,在大多数浏览器中,来自<img>标记的请求都会附带一个Referer: HTTP标头,您可以在Apache配置中使用它来过滤这些请求,但是:

  • 这不会保护您的图片,任何试图获取图片的人都可以添加它们,例如从命令行添加:curl -e 'http://my_referer.example.com' 'http://yoursite.example.com/upload/image.png'
  • 用户通过网页查看图片后,如果他们在地址栏中输入了网址,则可能会从浏览器缓存中提供图片,无论您使用的服务器配置如何,都会显示该图片

答案 2 :(得分:1)

你想要完成什么?您可以使用类似于此处所做的技术对图像进行base64编码并将它们放置在img标记的src属性本身中:http://www.greywyvern.com/code/php/binary2base64

可能有更多先进的方法来模糊图像数据,但最终你无法阻止那些想要黑客攻击的人。