扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
此内容不在自己服务器上,而通过技术手段,绕过别人放广告有利益的最终页,直接在自己的有广告有利益的页面上向最终用户提供此内容。 常常是一些名不见经传的小网站来盗取一些有实力的大网站的地址(比如一些音乐、图片、软件的下载地址)然后放置在自己的网站中,通过这种方法盗取大网站的空间和流量。
创新互联成立十多年来,这条路我们正越走越好,积累了技术与客户资源,形成了良好的口碑。为客户提供成都网站设计、网站制作、网站策划、网页设计、空间域名、网络营销、VI设计、网站改版、漏洞修补等服务。网站是否美观、功能强大、用户体验好、性价比高、打开快等等,这些对于网站建设都非常重要,创新互联通过对建站技术性的掌握、对创意设计的研究为客户提供一站式互联网解决方案,携手广大客户,共同发展进步。
为什么会产生盗链
一般浏览有一个重要的现象就是一个完整的页面并不是一次全部传送到客户端的。如果请求的是一个带有许多图片和其它信息的页面,那么最先的一个Http请求被传送回来的是这个页面的文本,然后通过客户端的浏览器对这段文本的解释执行,发现其中还有图片,那么客户端的浏览器会再发送一条Http请求,当这个请求被处理后那么这个图片文件会被传送到客户端,然后浏览器会将图片安放到页面的正确位置,就这样一个完整的页面也许要经过发送多条Http请求才能够被完整的显示。基于这样的机制,就会产生一个问题,那就是盗链问题:就是一个网站中如果没有起页面中所说的信息,例如图片信息,那么它完全可以将这个图片的连接到别的网站。这样没有任何资源的网站利用了别的网站的资源来展示给浏览者,提高了自己的访问量,而大部分浏览者又不会很容易地发现,这样显然,对于那个被利用了资源的网站是不公平的。一些不良网站为了不增加成本而扩充自己站点内容,经常盗用其他网站的链接。一方面损害了原网站的合法利益,另一方面又加重了服务器的负担。
如何实现防盗链
要实现防盗链,我们就必须先理解盗链的实现原理,提到防盗链的实现原理就不得不从HTTP协议说起,在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件。换句话说,通过referer,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。有了referer跟踪来源就好办了,这时就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返回指定的页面。
如果想对自己的网站进行防盗链保护,则需要针对不同的情况进行区别对待。如果网站服务器用的是apache,那么使用apache自带的Url Rewrite功能可以很轻松地防止各种盗链,其原理是检查referer,如果referer的信息来自其他网站则重定向到指定图片或网页上。
如果服务器使用的是IIS的话,则需要通过第三方插件来实现防盗链功能了,现在比较常用的一款产品叫做ISAPI_Rewrite,可以实现类似于apache的防盗链功能。另外对于论坛来说还可以使用“登录验证”的方法进行防盗链。
在IE或firefox浏览器中,我们可以使用HttpWatch抓包工具抓取网页的表头信息,该信息就包含了referer段内容,该内容反映的就是用户是从哪个地址到达当前页面的。下面使用PHP语句模拟“限制来路链接只能是本网站地址”的防盗链技术:
?phpif(isset($_SERVER['HTTP_REFERER'])){//通过字符串处理函数匹配来路URL是否以本站域名打头,是,则说明非盗链if(strpos($_SERVER['HTTP_REFERER']),'')==0){echo "您是通过本站其他页面链接到该页面";}else{echo "本站禁止盗链";}}esle{echo "您是通过类似直接输入当前URL的方式进入该页面的";}?由于referer值是极易伪造的,所以上述方法只是简单的防盗链。
关于防御方法,有以下3点:
1、不允许referer为空(不建议,因在某些开启隐私模式的浏览器中,或https页面引用下,referer是空的)
2、地址变更(lighttpd的是根据有效时间,nginx的根据是md5)
3、登录校验(如必须登录网站帐号后才能访问)
4.可以借鉴效仿crsf token令牌
二、应对方法
前端脚本
实现代码:
function showImg( url ) {
var frameid = 'frameimg' + Math.random();
window.img = 'img id="img" src=\''+url+'?'+Math.random()+'\' /scriptwindow.onload = function() { parent.document.getElementById(\''+frameid+'\').height = document.getElementById(\'img\').height+\'px\'; }'+'/script';
document.write('iframe id="'+frameid+'" src="javascript:parent.img;" frameBorder="0" scrolling="no" width="100%"/iframe');
}
调用方式:
showImg('图片地址');
关于防御方法,有以下3点:
1、不允许referer为空(不建议,因在某些开启隐私模式的浏览器中,或https页面引用下,referer是空的)
2、地址变更(lighttpd的是根据有效时间,nginx的根据是md5)
3、登录校验(如必须登录网站帐号后才能访问)
后端代理:
那么如何才能绕过防盗链对所需资源进行抓取???
php实战
在通常的处理过程中,如果在自己的站点直接引入百度的图片
这里写图片描述
(⊙o⊙)哦,引入链接失败咯啊!!!那么怎么用curl处理
毕竟要爬取必要的信息
$url="";
//$url = str_replace("http:/","http://",$url);
$dir = pathinfo($url);
$host = $dir['dirname'];
$refer = $host.'/';
$ch = curl_init($url);
curl_setopt ($ch, CURLOPT_REFERER, $refer);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1);
$data = curl_exec($ch);
curl_close($ch);
header("Content-type: image/jpeg");
print( $data );
然后么,因为直接print了,所以结果是这样的
这里写图片描述
python实战
Flask响应请求有以下几种方法:
render_template 返回模板文件
jsonify 返回json格式的数据
Response 自定义返回的数据及类型
当服务端需要返回图片或者各种格式的文件时,就需要使用Response进行自定义返
法一:
js的文件名,动态生成,换句话说:你的js文件名,每次初加载时是不一样,这样客户机(其他)电脑就不能直接引用。而具体的文件名,你可写个算法,比如,根据时间来动态加权,方法很多;
法二:
对js文件加密,方法也很多,这样其他人得到的加密后的乱码文件。
法三:
对js文件路径加密。
动态网站不是都有过滤器吗? 用 过滤器 如果后缀检测到是 js 就转页面就可以了script src="123.asp"/script123.asp 就是你得js文件判断request 里面获得的 IE浏览器 里面的路径如果 最后是 123.asp 就过滤掉!!跳转 错误页面!同时 还要 在session 里面加一个值 判断 不然 用框架啊 也可以 include 你的页面进来 所以 方法 是1:判断路径 2:同时 判断session 里面 是否有值这样 就能做到不可下载 也就是 asp的过滤 不知道 明白了不??补充: 这能说明你js 的格式不正确 或者 调用路径不对 或者 里面的代码有错误
//防盗一般只是判断referer是不是自己网站,如果referer为空也会显示图片,所以有了下面的代码。
meta http-equiv="Content-Type" content="text/html; charset=gb2312" /
script type="text/javascript"
function showImg( url ) {
var frameid = 'frameimg' + Math.random();
window.img = 'img id="img" src=\''+url+'?'+Math.random()+'\' /scriptwindow.onload = function() { parent.document.getElementById(\''+frameid+'\').height = document.getElementById(\'img\').height+\'px\'; }'+'/script';
document.write('iframe id="'+frameid+'" src="javascript:parent.img;" frameBorder="0" scrolling="no" width="100%"/iframe');
}
/script
h1直接盗链:/h1br
img src="" /br
h1js破解盗链:/h1br
div id="hotlinking"script type="text/javascript"showImg('');/script/divbr
兼容性:已测试IE6、IE7、IE8、chrome 7、FF3.6、Opera10.63
防御方法:
1、不允许referer为空(不建议,因在某些开启隐私模式的浏览器中,或https页面引用下,referer是空的);
2、地址变更(lighttpd的是根据有效时间,nginx的根据是md5);
3、登录校验(如必须登录网站帐号后才能访问);
函数如下:
function showImg( url ) {
var imgid = Math.random(),
frameid = 'frameimg' + imgid;
window['img'+imgid] = 'img id="img" src=\''+url+'?kilobug\' /scriptwindow.onload = function() { parent.document.getElementById(\''+frameid+'\').height = document.getElementById(\'img\').height+\'px\'; }'+'/script';
document.write('iframe id="'+frameid+'" src="javascript:parent[\'img'+imgid+'\'];" frameBorder="0" scrolling="no" width="100%"/iframe');
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流