分享

HTTP协议之防盗链与反防盗链

 一本正经地胡闹 2019-06-19
 https://blog.csdn.net/xiao_tommy/article/details/53186201

仅供HTTP协议的初学者了解。

使用HTTP协议。利用referer做防盗链(不需要用php编写,而是在服务器层面控制就OK了)
我们在网页里访问站外的图片的时候,在图片本站是可以看得,在外头就不能看了
因为header信息中的referer元素。
还有是做统计的时候,
我们能够统计出来用户是从哪个地方,什么时间访问网站的。比如腾讯分析网站
统计的时候是靠什么知道用户从什么地方去的网站


在HTTP协议中  头信息中有一个很重要的选项 referer
referer 表示的是网页的来源以及上一页的地址
如果直接在浏览器输入地址,进入网站,则没有referer头信息


所以,服务器可根据referer来知道用户从哪个网站进来的和图片是从哪个网站进来的

利用referer头信息来设置防盗链的具体操作步骤如下:

  1. /**
  2. 如何配置apache服务器。用于图片防盗链(使用url重写)
  3. 在web服务器层面,我们可以在http协议的referer头信息来判断,
  4. 如果来自站外,则统一重写到一个很小的防盗链提醒图片上去
  5. 步骤:
  6. 1.打开 apache 重写模块 mod_rewrite
  7. (D:\wamp\bin\apache\apache2.4.9\conf)
  8. #LoadModule rewrite_module modules/mod_rewrite.so
  9. 把#去掉,重启apache
  10. 2.在需要防盗的网站或者目录下,写 .htaccess 文件(windows下不能直接创建,可以另存)
  11. 并指定防盗链规则
  12. 分析referer信息,如果不是来自本站,则重写
  13. **/
  14. 重写规则 .htaccess 文件
  15. 1.哪种情况重写规则
  16. 是jpeg/gif/png图片的时候
  17. 是referer头与localhost不匹配的时候
  18. 2.怎么重写
  19. 统一 rewrite 到某个防盗链图片上
  20. RewriteEngine On
  21. //只是在改页面下生效
  22. Rewrite Base /HTTPxieyi/day1
  23. //会对以下格式的文件进行重写规则
  24. RewriteCond %{REQUEST_FILENAME} .*\.(jpg|jpeg|gif|png) [NC]
  25. //如果不是来自localhost的用户,会重写
  26. RewriteCond %{HTTP_REFERER} !localhost [NC]
  27. //会重写到自学it网的logo上
  28. RewriteRule .* http://www./static/image/common/zixuelogo.png
html的具体代码如下
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>图片的防盗链</title>
  6. </head>
  7. <body>
  8. <p>
  9. <img src="http://imgsrc.baidu.com/forum/w%3D580%3B/sign=5547962a02d162d985ee621421e4a8ec/0d338744ebf81a4c06403427df2a6059242da6ea.jpg" alt="">
  10. <img src="./bb.jpg" alt="">
  11. <img src="./aa.jpg" alt="">
  12. </p>
  13. </body>
  14. </html>
反防盗链的具体代码如下:
  1. <?php
  2. /**
  3. 反防盗链
  4. ****/
  5. require('./07.class.php');
  6. $http = new Http('http://localhost/HTTPxieyi/day1/bb.jpg');
  7. //如果没有加以下这句话,就会显示盗链
  8. //加上referer就会告诉浏览器,我是来自localhost的,不是来自其他网站的,你不用防我
  9. $http->setHeader('Referer: http://localhost');
  10. $res = $http->get();
  11. //aaa.显示的倒链
  12. //file_put_contents('./aaa.jpg',substr(strstr($res,"\r\n\r\n"),4));
  13. file_put_contents('./bbb.jpg',substr(strstr($res,"\r\n\r\n"),4));
  14. //应该在判断路径或者response的mime头信息,确定图片的类型



https://blog.csdn.net/xiao_tommy/article/details/53186201

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多