apache,RewriteEngine on,RewriteCond %{HTTP_REFERER} !^$,RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourdomain.com [NC],RewriteRule \.(jpg|jpeg|png|gif)$ [NC,F,L],
`,3. 将
yourdomain.com`替换为您的域名;,4. 保存并上传.htaccess文件。用.htaccess设置图片文件防盗链教程
防盗链判断原理
防盗链是通过请求头中的Referer地址进行判断的,Referer是HTTP请求头的一部分,当浏览器向Web服务器发送请求时,一般会带上Referer,告诉服务器该请求是从哪个页面链接过来的,服务器就可以基于此信息禁止或允许某些来源的网站访问资源。
如果直接在浏览器中打开文件链接https://examplebucket1250000000.cos.apguangzhou.myqcloud.com/1.jpg,请求头里不会带有Referer,但如果是嵌入到网页上,如https://127.0.0.1/test/test.html,则请求头会带有Referer指向访问来源。
盗链案例分析
用户A在COS上传了图片资源1.jpg,得到图片的可访问链接为https://examplebucket1250000000.cos.apguangzhou.myqcloud.com/1.jpg,用户A将该图片嵌入到自己的网页https://example.com/index.html上,图片能正常访问,用户B在用户A的网页上看到了该图片,决定将该图片嵌入在他自己的网页https://b.com/test/test.html上,此时用户B的网页也能正常显示该图片,这样,用户A的图片资源就被用户B盗链了。
解决方式
根据以上盗链案例分析,用户A可以通过设置防盗链规则来防止用户B盗链图片,具体方法如下:
1、登录对象存储控制台,在左侧导航栏中单击存储桶列表,进入存储桶列表页。
2、选择需要设置防盗链的存储桶,进入存储桶。
3、在左侧菜单栏中单击安全管理 > 防盗链设置,进入存储桶防盗链设置的配置页。
4、在“防盗链设置”栏中,单击编辑,进入编辑状态。
5、开启防盗链,并配置名单类型和域名,此处选择开启方式二,详细说明如下:
类型:有黑、白名单两种:
黑名单:限制名单内的域名访问存储桶的默认访问地址,若名单内的域名访问存储桶的默认访问地址,则返回403。
白名单:限制名单外的域名访问存储桶的默认访问地址,若名单外的域名访问存储桶的默认访问地址,则返回403。
Referer:设置域名支持最多十条域名且为前缀匹配,支持域名、IP和通配符*等形式的地址,一个地址占一行,多个地址请换行。
6、配置完成之后,单击保存即可。
配置项 | 示例 | 说明 |
Referer | example.com *.example.com example.com:8080 | 支持带端口的域名和IP |
Referer | *.example.com | 限制它的二级、三级域名example.com |
Referer | example.com:8080 | 配置example.com,可命中其带端口域名 |
Referer | 10.10.10.10:8080 | 配置IP及端口 |
Referer | https://example.com | 支持协议头http或https |
相关疑问解答FAQs
1、问:为什么设置了防盗链后,直接输入图片地址仍能显示图片?
答:这是因为直接在浏览器中输入图片地址时,请求头中没有Referer字段,为了更彻底地实现防盗链,可以在Nginx配置中使用rewrite
指令将盗链请求重定向到一个特定的错误提示页面或图片。
2、问:如何验证防盗链设置是否生效?
答:验证防盗链设置是否生效的方法是尝试从不同域名访问被保护的图片,如果非白名单域名无法访问图片,而白名单域名可以正常访问,则表示防盗链设置生效。
通过上述步骤,您可以有效地防止未经授权的网站盗链您的图片资源,从而节省流量费用并保护您的版权。
步骤 | 配置代码 | 说明 |
1 | 打开服务器上的.htaccess 文件 | 如果你的服务器上还没有.htaccess 文件,你需要创建一个。 |
2 | 添加RewriteEngine On 指令 | 启用Apache的重写引擎。 |
3 | 添加RewriteCond 指令 | 指定重写规则的条件。 |
4 | 添加RewriteRule 指令 | 定义实际的重写规则。 |
5 | 保存并关闭.htaccess 文件 | 保存更改并关闭文件。 |
详细说明
步骤 | 配置代码 | 说明 | |
1 | ``RewriteEngine On `
| 这行代码必须放在.htaccess`文件的最前面,以启用Apache的重写引擎。 | |
2 | ``RewriteCond %{REQUEST_FILENAME} !f `
| 这个条件确保只有非文件类型的请求才会被重写。f`标志表示检查请求的文件是否存在。 | |
3 | ``RewriteCond %{REQUEST_FILENAME} !d `
| 这个条件确保请求的不是一个目录。d`标志表示检查请求的是否是一个目录。 | |
4 | ``RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?yourdomain.com(/ | $)`
| 这个条件用于检查HTTP_REFERER头部是否来自允许的域名,你需要将yourdomain.com`替换为你的域名。 |
5 | ``RewriteRule ^images/(.*)$ [F] `
| 这个规则将匹配所有以/images/开头的请求,并阻止访问。 [F]`标志表示返回403 Forbidden错误。 | |
6 | ``RewriteRule ^images/(.*)$ [R=403,L] `
| 这个规则可以替代上一个规则,使用[R=403,L]`标志来返回403 Forbidden错误,并且停止重写处理。 |
确保将上述代码块放入.htaccess
文件中,并替换yourdomain.com
为你的实际域名,这样,任何尝试直接访问/images/
目录下的图片的请求都会被拒绝,除非请求来自允许的域名。