Code笔记 之:防盗链(图片)
图片防盗和图片防盗链有什么区别呢?
图片防盗: 是不想自己的图片被别人使用。
图片防盗链: 是不想自己的图片被别人使用,且消耗的是自己的服务器流量。
图片防盗是困难的,完美的图片防盗那几乎是不可能的。但还是有很多方法能够减少图片盗用,下面是10种,选一种你喜欢的吧。
隐藏图片
使用空白图片覆盖真实图片
这个方法可以让别人无法获取真实的图片,除非查看源代码。
你可以把真实的图片做为背景图片,而使用一张透明图片匹配尺寸并覆盖到真实图片上面。
例如:
<div id="image1" style="background-image: url(originalImage.jpg);">
<img src="blank.gif" height="250px" width="300px">
</div>
这样,当别人使用右键查看或保存图片的时候,得到的是这张透明图片。
这里是2个 javascript框架可以实现这种图片防盗链方法:
dwProtector for MooTools
dwProtector for jQuery
自动截切图片
Super Simple Image Tiles
这是一个非常有效的图片防盗链方法.
它支持两种方案:
让用户下载到的是被裁切过的图片。
让用户下载到的是打上水印的图片。
当用户尝试下载图片的时候,它就会进行截切或添加水印操作,但是这个方法也有很大的劣势:
造成太多的服务器请求负荷,对网站整体性能影响不好
你将拥有许多的图片文件
使用带水印的图片 (预先生成)
预先给图片添加水印也是个防止图片被盗的有效方法,就算别人要盗,至少也为你免费宣传了一下自己的网站。
但缺点也来了:
图片会看的不清楚或不美观了(这对于图片展示类的网站尤其重要,但又正是该类网站特尤其图片防盗)
可以下载然后裁剪水印(当然,如果你是那种把水印放在图片中间或水印有图片这么1/3大的家伙,就不用担心这个问题了)
要手动添加水印的话,可以使用photoshop,GIMP,轻松水印等软件。也可以选择下面的一些在线图片水印工具:
PicMarkr(详细介绍)
WatermarkTool
延伸阅读: 8款为图片添加水印的软件
使用水印 (服务器端生成)
使用服务器端自动为图片添加水印,是件省心的事情。只是需要一些脚本知识。
下面是一些相关的各种脚本语言的示例方案:
Asido: PHP Image Processing Library
Asido 是一个PHP图像处理库,可以运行于 GD2, Magick Wand 和 Image Magick.
这里 是 Asido 为图片添加水印的详细说明.
其它PHP 解决方案:
Put watermark on images using PHP
Watermark your images with PHP 5 and GD
Watermark images on the fly in PHP
ASP.NET 解决方案:
Thumbnail and watermark images on the fly with ASP.NET
Watermarking Images in ASP.NET with an HttpHandler
CoolWatermark (paid)
Ruby 解决方案:
RMagick
Watermarking your images with RMagick
P.S:俺偶尔良心发现的时候,会考虑一下版权问题: 这种自动添加水印的方法是为每一张力图片都添加水印,但是否有权利为每张图片都添加水印呢?除非所有的图片是自己原创。或许这也是国外给图片打水印的网站比较少的原因之一。
使用Flash来显示图片
swfIR (详细介绍)
swf image replacement 可以让图片显示于Flash内部,让右键下载变的不可能。
并且,图片仍然可以使用CSS进行样式化。
缺点可想而知: 拖慢网页载入速度。
基于浏览器的图片防盗
禁用右键菜单
通过JavaScript来禁用点键菜单 是图片防盗的一个方法,但它仅仅是对于网络菜鸟来说,中等点的网民可以很轻松的查看到代码获取图片地址,再高等点的可以轻松破解,禁用你的禁用!
所以这并不是一个好方法,更重要的是它是极不利于用户浏览体验的。
这有一个折中的方法,你可以通过一个jQuery 插件 来实现仅仅禁用保存功能.
禁用IE6的图像工具条
在IE6下,当鼠标悬浮在一张图片上时,会出现工具条,上面有保存功能,你可以使用下面的代码禁用:
<meta http-equiv="imagetoolbar" content="no">
//php图片防盗链功能
$ADMIN[defaulturl] = "img/no.gif";//盗链返回的地址
$okaysites = array("http://www.5v6.com/","http://t.5v6.com/"); //白名单
$ADMIN[url_1] = "http://t.5v6.com/";//下载地点1
$ADMIN[url_2] = "";//下载地点2,以此类推
$reffer = $HTTP_REFERER;
if($reffer) {
$yes = 0;
while(list($domain, $subarray) = each($okaysites)) {
if (ereg($subarray,"$reffer")) {
$yes = 1;
}
}
$theu = "url"."_"."$site";
if ($ADMIN[$theu] AND $yes == 1) {
header("Location: $ADMIN[$theu]/$file");
} else {
header("Location: $ADMIN[defaulturl]");
}
} else {
header("Location: $ADMIN[defaulturl]");
}
?>
--------------------------------------------------------------
由于个人对技术知识的表达不是很专业,还望各位看官
多多见谅,多多评论,多多指导!
不吝赐教~(~_~)
---------------------------------------------------------------
撰写日期:2016-06-14 11:01:25
更新时间:2016-06-20 11:01:04
Code笔记 之:防盗链(图片)的更多相关文章
- Nginx防盗链的3种方法 文件防盗链 图片防盗链 视频防盗链 linux防盗链
Nginx 是一个很牛的高性能Web和反向代理服务器, 它具有有很多非常优越的特性: 在高连接并发的情况下,Nginx是Apache服务器不错的替代品,目前Web服务器调查显示Apache下降Ngni ...
- 部分网站允许空白referer的防盗链图片的js破解代码
Reference: http://www.114390.com/article/27125.htm Javascript源码: 复制代码代码如下: function showImg( url ) { ...
- nginx配置图片防盗链
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)${ expires 30d; access_log off; valid_referers none blocked ...
- HTTP 笔记与总结(6)referer 头与防盗链
在百度贴吧(或 QQ 空间等)中找到一张图片,复制图片地址,在站外通过 img src 引用,会发现: 此外,在一些统计软件中,统计访客的来路(直接访问.外部链接.搜索引擎),都用到了 HTTP 协议 ...
- Java破解图片防盗链
前言 今天想下载几张好看的壁纸,然后发现了一张是自己比较喜欢的额.然后点进去看看,WOW!好多好看的壁纸呀,于是我就起了贪念.哈哈!想把他们这一组图片打包下载,小白的方法就是一张一张下载,那样对于我们 ...
- nginx防盗链配置
Ps:防盗链的意义就是保证自己的版权,不免网站的流量流失,为他人做嫁衣.下面是网上看到的三种方法: 修改 /usr/local/nginx/conf/nginx.conf 这个配置文件.找到locat ...
- 05 referer头与防盗链
像上图中的这个效果,当我们在网页里引用站外图片时,常出现这样的情况. ??? 服务器是怎么样知道,这个图片是在站外被引用的呢? 还有在网站的统计结果,统计用户从何而来,如下图 ??? 统计时,是如何得 ...
- php防盗链技术
在Http协议中,头信息里,有一个重要的选项: Referer Referer: 代表网页的来源,即上一页的地址 如果是直接在浏览器上输入地址,回来进来,则没有Referer头. 这也是: 为什么服务 ...
- Nginx跨域访问场景配置和防盗链
跨域访问控制 跨域访问 为什么浏览器禁止跨域访问 不安全,容易出现CSRF攻击! 如果黑客控制的网站B在响应头里添加了让客户端去访问网站A的恶意信息,就会出现CSRF攻击 Nginx如何配置跨域访问 ...
- PHP及相关服务器防盗链
服务器防盗链 假设域名为www.localhost.com 1.apache配置httpd.conf SetEnvIfNoCase Referer "^http://www.localhos ...
随机推荐
- 迭代和递归 - leetcode 206. Reverse Linked List
Reverse Linked List,一道有趣的题目.给你一个链表,输出反向链表.因为我用的是JavaScript提交,所以链表的每个节点都是一个对象.例如1->2->3,就要得到3-& ...
- Unity 5.3.1 No Android/IOS module loaded
unity我一直在用5.0以下的版本 昨天升级到了最新版本5.3.1 发现无法打android包,ios也不行 提示“No Android/IOS module loaded” 下面有个Module ...
- ASP.NET 系列:单元测试之ConfigurationManager
通过ConfigurationManager使用.NET配置文件时,可以通过添加配置文件进行单元测试,虽然可以通过测试但达不到解耦的目的.使用IConfigurationManager和Configu ...
- 记、基于react-router的单页应用
现在用react写单页应用基本上都是用react-router做前端路由了吧!最近在使用react-router的过程中遇到了不少问题,在这里总结一下. 浏览器url react-router默认提供 ...
- matlab如何建立一个空矩阵,然后往里面赋值
x=:; y=[]; :length(x) % y=[y;x(i)];%把每一个x都放到Y里,成为一列 y=[y,x(i)];%把每一个x都放到Y里,成为一行 end
- TP学习笔记一(tp的目录结构 , tp的输出方式)
一.ThinkPHP的介绍 //了解 MVC M - Model 模型 工作:负责数据的操作 V - View 视图(模板) 工作:负责前台页面显示 C - Controller 控制器(模块) 工作 ...
- asp.net mvc输出自定义404等错误页面,非302跳转。
朋友问到一个问题,如何输出自定义错误页面,不使用302跳转.当前页面地址不能改变. 还要执行一些代码等,生成一些错误信息,方便用户提交反馈. 500错误,mvc框架已经有现成解决方法: filters ...
- MySQL server PID file could not be found!
重启mysql提示MySQL server PID file could not be found! Starting MySQL...The server quit without updating ...
- elasticsearch-查询基础篇
elasticsearch的查询有两部分组成:query and filter. 两者的主要区别在于:filter是不计算相关性的,同时可以cache.因此,filter速度要快于query. 先记录 ...
- ActiveMQ_Linux安装(一)
一.下载:apache-activemq-5.14.0-bin.tar.gz http://activemq.apache.org/activemq-5140-release.html 二.安 ...