Apache
每个网站所有者都在尽力美化自己的网站,使它看上去更酷、更具有吸引力,其中最常见的方法就是使用图片、Logo及Flash等。但是,这也会带来一个问题,因为越漂亮、越吸引人的网站,漂亮的图片和Flash等就容易被别的网站悄悄的盗用。下面我们就一起讨论如何防止网站图像被盗用。需要解决的问题
简单的说,这里有两种不同的盗用行为:
1. 使用HTML标记IMG在自己的网站中引用网站的图片。
2. 从网站上下载图片,然后放在自己的网站上。
对于第一种的盗用行为,合法网站的图片被用来美化装饰其它网站,这种盗用对合法网站的损害比较大,因为访问非法网站的访问者其实是从合法网站获取图片的,合法网站的日志文件充满了访问请求记录,并且带宽被非法访问消耗,而合法网站却没有得到任何好处。这种类型的盗用通过技术手段完全可以被防止。
第二种类型的盗用相对来说比较阴险,浏览者在非法网站直接访问非法的图片,而合法网站的版权受到侵害,却得不到赔偿,甚至无法发现这种盗用。因为Web的工作方式对这种类型的盗用实际上无法被阻止,但是可以使得这种盗用更加困难。
完全杜绝这两种盗用行为是不现实的,但是通过技术手段可以使得这种盗用非常困难。在Apache环境下,通过配置可以限制网站图片被盗用。
标识需要保护的文件
作为网站管理员,最大的希望就是能够保护网站上所有文档,但是从技术角度考虑这种想法是不现实的,因此我们这里只讨论对图片文件的保护。
作为保护的第一步,首先需要标识出需要保护的文件,然后才能进一步对被标识的文件进行保护。在Apache配置文件中添加如下内容:
<ccid_code><filesmatch> [这里添加保护限制命令] </filesmatch></ccid_code> |
将
Referer HTTP头字段
当用户访问Web服务器请求一个页面时,用户浏览器发送的HTTP请求中会有一个被称为HTTP请求头(HTTP Request Header)的信息,这个头信息中包含客户请求的一些信息,例如发出请求客户主机的浏览器版本、用户语言、用户操作系统平台、用户请求的文档名等,这些信息以变量名/变量值的方式被传输。
在这些信息中,Referer字段对于实现防止图片盗用非常重要。Referer字段指定客户端最后一个页面的URL地址。例如,如果用户访问页面A,然后点击在页面A上到页面B的链接,访问页面B的HTTP请求会包括一个Referer字段,该字段会包括这样的信息“这个请求是来自于页面A”。如果一个请求不是来自于某个页面,而是用户通过直接在浏览器地址栏输入页面A的URL地址的方式来访问页面A,那么在HTTP请求中则不会包括Referer字段。这样对于我们防止盗链有什么帮助呢?Referer字段是帮助判断对图像的请求是来自自己的页面,还是来自其它网站。
使用SetEnvIf对图像进行标记
作为一个简单的例子,假设需要保护的网站的主页面为http://my.apache.org,这时候希望限制所有不是源于本网站的网络访问请求(例如只允许访问包含在本网站页面内的图片)。这里可以使用一个环境变量作为一个标记,如果条件满足时就设置该变量,如下所示:
SetEnvIfNoCase Referer "^http://my\.apache\.org/" local_ref=1
当Apache处理一个请求时,它会检查HTTP请求头中的Referer字段,如果该请求来源于本网站(也就是请求页面的URL为本网站域名),则设置环境变量local_ref为1。
在双引号中的字符串是一个正则表达式,只有匹配该正则表达式,环境变量才会被设置。本文不讨论如何使用正则表达式,这里只需要理解SetEnvIf*命令会使用正则表达式作为参数。
SetEnvIfNoCase命令的“NoCase”部分表示这里的正则表达式忽略大小写,'http://my.apache.org/'、'http://My.Apache.Org/'或 'http://MY.APACHE.ORG/'都可以匹配条件。
在访问控制中使用环境变量
Apache配置文件中的Order、Allow和Deny命令可以实现对文档的基于环境变量的访问控制,使用Order、Allow和Deny命令首先要考虑的是Allow和Deny命令的顺序对于Apache处理结果的影响,应该以下面的方式使用:
Order Allow,Deny
这里表示Apache首先处理该HTTP请求相关的Allow命令,然后处理相关的Deny命令。这种处理方式的默认策略是Deny,所以除非有明确的允许的设置,否则该请求就会被拒绝,任何非法访问将无法成功。
因此,在Apache的配置文件httpd.conf中添加如下命令,来实现本地引用发挥作用:
<ccid_code>Order Allow,Deny Allow from env=local_ref</ccid_code> |
这样只有在local_ref变量被定义的情况下,该请求才会被允许;否则其它所有请求和访问将会被拒绝,因为这些请求不满足Allow条件。
注意,请不要在.htaccess和httpd.conf中使用
把这些相关设置放在一起,在Apache的配置文件中就会有如下内容:
<ccid_code>SetEnvIfNoCase Referer "^http://my\.apache\.org/" local_ref=1 <filesmatch> Order Allow,Deny Allow from env=local_ref </filesmatch></ccid_code> |
如上配置可以存放在服务器配置文件httpd.conf中,或者存放在.htaccess文件中,最后的效果是一样的:在这些命令作用的范围内,只有从本网站引用的图片才可以被访问。
对图片进行水印处理
上面介绍的方法并不能完全防止图像盗链,这是因为有些执著的盗用者可以伪造Referer值来盗用图片,使相关设置失效,所以不可能完全防止网站图片被盗链,但是上面采取的措施会使得盗链变得很困难。
此外,还有一个防止图片被盗用的方法,就是对网站的图片都进行水印处理。对一个数字图片进行水印处理是指在图片中加入一个特殊的签名编码,并且可以进行验证和检测,数字水印并不会降低图片的质量,甚至可以实现图像被切割以后的剩余部分仍然会包括水印信息。图片被再次编辑、打印,并再次扫描以后,水印仍然可以被检测到。因此,水印技术是一个非常好的保护图片不被盗用的技术。
记录盗用请求
如果想知道自己网站的艺术品是否被盗,可以尝试使用同样的侦测和环境变量来记录可疑请求。例如,在httpd.conf文件中添加如下命令,那么会在/usr/local/web/apache/logs/poachers_log文件中记录所有具有非法的Referer头信息的访问请求:
<ccid_code>SetEnvIfNoCase Referer "!^http://my\.apache\.org/" not_local_ref=1 SetEnvIfNoCase Request_URI "\.(gif|jpg)" is_image=1 RewriteEngine On RewriteCond ${ENV:not_local_ref} =1 RewriteCond ${ENV:is_image} =1 RewriteRule .* - [Last,Env=poach_attempt:1] CustomLog logs/poachers_log CLF env=poach_attempt</ccid_code> |
在上面代码中,头两行为条件设置标记(也就是没有正确的本地Referer的图片文件),RewriteCond检测是否该标记被设置,然后RewriteRule设置第三个标记,最后一行使得这样的访问请求被记录在特定的文件中。
上面简单介绍了在Apache环境下,如何通过配置来限制网站图片被盗用的方法,抛砖引玉,希望大家将自己更好的经验介绍出来。

计算PHP多维数组的元素总数可以使用递归或迭代方法。1.递归方法通过遍历数组并递归处理嵌套数组来计数。2.迭代方法使用栈来模拟递归,避免深度问题。3.array_walk_recursive函数也能实现,但需手动计数。

在PHP中,do-while循环的特点是保证循环体至少执行一次,然后再根据条件决定是否继续循环。1)它在条件检查之前执行循环体,适合需要确保操作至少执行一次的场景,如用户输入验证和菜单系统。2)然而,do-while循环的语法可能导致新手困惑,且可能增加不必要的性能开销。

在PHP中高效地哈希字符串可以使用以下方法:1.使用md5函数进行快速哈希,但不适合密码存储。2.使用sha256函数提高安全性。3.使用password_hash函数处理密码,提供最高安全性和便捷性。

在PHP中实现数组滑动窗口可以通过函数slidingWindow和slidingWindowAverage来完成。1.使用slidingWindow函数可以将数组分割成固定大小的子数组。2.使用slidingWindowAverage函数可以在每个窗口内计算平均值。3.对于实时数据流,可以使用ReactPHP进行异步处理和异常值检测。

PHP中的__clone方法用于在对象克隆时进行自定义操作。使用clone关键字克隆对象时,如果对象有__clone方法,会自动调用该方法,允许在克隆过程中进行定制化处理,如重置引用类型属性以确保克隆对象的独立性。

在PHP中,goto语句用于无条件跳转到程序中的特定标签。1)它可以简化复杂嵌套循环或条件语句的处理,但2)使用goto可能导致代码难以理解和维护,3)建议优先使用结构化控制语句。整体而言,goto应谨慎使用,并遵循最佳实践以确保代码的可读性和可维护性。

在PHP中,数据统计可以通过使用内置函数、自定义函数和第三方库来实现。1)使用内置函数如array_sum()和count()进行基本统计。2)编写自定义函数计算中位数等复杂统计。3)利用PHP-ML库进行高级统计分析。通过这些方法,可以高效地进行数据统计。

是的,PHP中的匿名函数是指没有名字的函数。它们可以作为参数传递给其他函数,并作为函数的返回值,使代码更加灵活和高效。使用匿名函数时需要注意作用域和性能问题。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

Atom编辑器mac版下载
最流行的的开源编辑器

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

禅工作室 13.0.1
功能强大的PHP集成开发环境

mPDF
mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

Dreamweaver Mac版
视觉化网页开发工具