图片盗链和防盗链

背景:今天为了了解高并发,大访问量的技术中,有提到防盗链这块,就先整理清楚这块的内容..

[b]什么是盗链?(具体请参考)[/b]
[url]http://www.cnblogs.com/AngelLee2009/archive/2011/10/13/2209594.html[/url]

[b]第一部分:如何防盗链[/b]

第一种方式,通过服务器配置来禁止非法访问,我这里要以Nginx配置为例;
具体请参考:[url]http://blog.csdn.net/longjef/article/details/53284108[/url]
[img]http://dl2.iteye.com/upload/attachment/0123/7922/72535089-663b-33b1-b4ed-b9e6cf6e87d6.png[/img]

第二种方式: 通过动态防护处理的方式,但是可能会影响网站的性能;

[img]http://dl2.iteye.com/upload/attachment/0123/7924/7a8590e8-74d9-3fd1-80c7-9daa5888f690.png[/img]


[b]第二部分: 如何盗链[/b]
无非就是动态模拟头部等方式去读取内容,如果系统做了第二种动态防护的方式,就得想其他的方式了,目前没有好想法~_~

[img]http://dl2.iteye.com/upload/attachment/0123/7926/bfc7a571-218f-3ec8-97a9-a44f0c22c481.png[/img]


代码:
[b]nginx配置防盗链[/b]
location ~* \.(gif|jpg|jpeg|png|bmp|swf)$ {
valid_referers none blocked my_mobile.com ;
if ($invalid_referer) {
return 403;
}
}

[b]盗链防护代码[/b]

<!--正常的图片访问方式-->
<img src="http://my_mobile.com/static/images/getheadimg.jpg">
<!--防盗链的图片访问方式-->
<img src="http://my_mobile.com/test/get_img?id=xxx">

//这里只是举个简单的例子,至于id验证,逻辑判断和面向对象写法,自己实际去做的时候去优化
//实际路由,请自己复制代码到项目中进行测试
public function get_img($img_name='getheadimg.jpg') {
$file_name = FCPATH."/static/images/".$img_name;
$img_data = fread(fopen($file_name,'rb'),filesize($file_name));
$img_info = getimagesize($file_name);
header("content-type:{$img_info['mime']}");
echo $img_data;
}

[b]盗链代码[/b]

//PHP如何盗链
public function index() {
//第一种情况:没做防盗链处理的盗链方式,直接访问就可以了
// echo '<img src="http://my_mobile.com/static/images/add.png">';

//第二种情况: 做了nginx防盗链处理的盗链方式,还是可以盗链
$url="http://my_mobile.com/static/images/getheadimg.jpg";
//方式一
// $dir = pathinfo($url);
// $refer = $dir['dirname'].'/';
// $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 );
//方式二:
header('Content-type: image/jpeg');
echo file_get_contents($url);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值