php伪造引荐者请求防盗链资源的详细说明
为了防止自己的产品被盗链访问,一些产品会采取反盗链措施,比如关闭生态音乐网站和视频网站。他们已经为版权付费了,自然不希望你免费使用他们的资源。但是,由于很多人专门从事防盗链,我们也需要了解防盗链、防盗链、规避防盗链的原理。
连锁盗窃
引用百度百科对链盗的定义:
链盗是指服务提供者不自行提供服务的内容,通过技术手段绕过其他有益的终端用户界面(如广告),直接在自己的网站上向终端用户提供其他服务提供者的服务内容,从而骗取终端用户的浏览和点击率。受益者不提供资源或提供的资源很少,而真正的服务提供者却得不到任何好处。
传统链式盗窃
我们知道,网站通过向服务器请求一个html文件来提供服务。这个文件包含css/js文件和img/视频标签。当加载html文件时,这些静态资源会依次发送请求并填充到指定的位置,从而完成整个页面的加载。
因此,只要我们获得这张图片的网址,并将其嵌入到我们自己的html文件中,我们就可以在我们的网站上访问它。由于资源是由不同的HTTP请求独立访问的,所以我们也可以过滤源站点的html文件。这是最简单的连锁盗窃。
危害:用户访问时并不是访问被盗网站,但仍会占用网站的带宽资源,运营商要为带宽买单。同时,网站的广告、周边、宣传等资源不会被用户访问。
分布式链式盗窃
分布式链盗比较复杂,需要在服务器上部署专门的程序。整个网络的所有有用资源都被窃取,存储在自己的数据库中,并在用户实际访问时完全转化为自己的流量,而不是针对单个网站或url。
危害:通过劳动、金钱、版权支付获得的资源被盗网站免费使用,如网店照片、期刊、电视剧等。因此,其会员和服务无法盈利。
防盗链分类
在我们了解了链盗对源站的危害之后,自然要通过一些手段来防止这种行为,保护自己的利益。
水印
这是最简单的方法。通过后端程序批量对图片等资源进行水印,从而在盗链的同时推广自己的网站,有时甚至主动寻求这种盗链。
重命名资源
因为链盗是通过指定的url,其中必须包含资源的路径和名称,链盗可以通过不定期更改文件或目录的名称来快速避免,但下载的资源也会被中断。
限制引用页面
在http请求的头信息中,有一个字段:referer,表示请求来自哪个页面。如果它是单独在页面中打开的或者是由服务器请求的,则该字段为空。因此,我们可以通过引用字段的值来限制它。如果是自己审批的页面,会退回资源;否则,该请求将被禁止。但是,因为每次都需要打开白名单文件进行url匹配,所以性能会降低。
加密认证
在客户端,用户身份验证信息和资源名称被组合并加密,加密的字符串被用作url的参数来发起请求。服务器解密并通过身份验证后,将返回请求的资源。这种方法主要用于防止分布式链盗窃。
防盗链程序
以上三种防盗链方式中,常用的是第三种,通过referer属性完成防盗链。今天主要分享这个方法的防盗链和防盗链。
后端程序限制
这种限制会消耗服务器端的计算资源,因此不像Nginx限制那样常见。
$ from=parse _ URL($ _ SERVER[' HTTP _ REFER ']);if($来自['host']!='xxx.com' $from['host']!='www.xxx.com') {die('你在偷链子');}Nginx限制
您可以通过修改nginx配置文件来做到这一点,并且记得在修改后重新启动nginx:
//在这里指定需要防盗链的资源,比如gif/jpg等。位置~ * \。(GIF | JPG | PNG | JPEG)$ {//将资源的到期时间设置为到期30d//设置法律参考页,即防盗链白名单;//none blocked确保用户在打开新页面时仍然可以打开该页面。如果不想让用户保存和删除这两项:valid _ references none blocked * . Hugo o8.com * . Baidu.com * . Google.com;//对于非法引用页面,可以重写图片,如果($ invalid _ referer)可以直接返回403或404页{重写/http://www.it300.com/static/images/404.jpg; #返回404;} }推荐人-策略
Referer头包含当前请求页面的源页面的地址,这意味着当前页面是通过此源页面中的链接输入的。服务器通常使用Referer头来标识访问源,这可以用于统计分析、日志记录和缓存优化。
Referer属性出现在请求头中,也在请求头中设置,但是在浏览器安全策略中,该值不能由js指定:
$.ajax ({URL :' http://www。Baidu.com ',在发送(xhr)之前{//在发送Ajax请求之前设置头标xhr . setrequestheader(' refer ',' http://translate.google.com/' ');xhr . setrequestheader(' User-Agent ',' stage怯场/1.2(Linux;Android 5.0)’);},成功(数据){ console.log(数据);},错误(err){ console . log(err);}});但是,浏览器会报告一个错误:
那么Referer是如何自动设置的呢?这取决于如何定义引用者策略属性:
无引用:整个引用标头将被删除。访问源信息不会随请求一起发送。降级时无引用(默认):是用户代理的默认行为,不指定任何策略。参考页面的地址将在相同的安全级别下发送(HTTPS-HTTPS),但在降级的情况下不会发送(HTTPS-HTTP)。Origin :在任何情况下,只有文件的来源作为参考地址发送。例如,https://example.com/page.html将使用https://example.com/作为其参考地址。origin-when-cross origin :发送完整的URL作为同源请求的参考地址,但只发送非同源请求的文件来源。同源:发送同源请求的参考地址,但不发送非同源请求的参考地址信息。Strict-origin :在相同的安全级别下发送文件的来源作为参考地址(HTTPS-HTTPS),但在降级的情况下不发送(HTTPS-HTTP)。严格来源当跨来源:发送一个完整的网址作为相同来源请求的参考地址;在相同的安全级别下,发送文件的来源作为引用地址(https-https);在降级的情况下不要发送此报头(HTTPS-HTTP)。Unsafe-url :发送完整的url(删除参数信息后)作为参考地址,不管它是同源请求还是非同源请求。该值可以通过三种方式设置:
meta name=' referer ' content=' origin ' a href=' http://example.com ' rel=' external nofollow ' rel=' external nofollow ' referer policy=' origin ' a href=' http://example.com ' rel=' external nofollow ' rel=' no Ferrer '防盗链
前端JS无法在头部设置Referer字段,由于浏览器的安全策略,与跨域相同,所以服务器上的相同请求不会有这些限制,我们可以在服务器请求时自由修改Referer字段。
我们用一个简单的PHP例子来做这件事:
?PHP $ URL=' http://t11 . Baidu.com/it/u=300889497,862090385fm=77 ';$ refer=' https://www . Baidu.com ';$ ch=curl _ init();//请求url形式的curl _ setup pt($ ch,curl opt _ URL,$ URL);//以文件流的形式返回,不直接输出到浏览器curl _ setopt ($ ch,curl opt _ returntransfer,1);//浏览器发起的请求超时设置curl _ setopt ($ ch,curl opt _ connecttimeout,30);//伪造源地址curl _ setopt ($ ch,curl opt _ referer,$ refer);$ file=curl _ exec($ ch);curl _ close($ ch);标题(' Content-type : text/html ');//base64对图片进行编码,然后返回前端显示$ file=base64 _ encode($ file);echo ' img src=' data : image/JPEG;base64,{ $ file }“/”;第一次要求对伪造的源地址这一行进行标注,第二次要求不对这一行进行标注,以验证执行结果:
摘要
盗窃链和防盗链是对立的,最终目的是为了开放资源,保护知识产权。在互联网生态中,我们通过防盗链保护自己的利益,也利用防盗链拓展我们的内容。无论我们站在哪一边,我们都需要了解自己,了解自己。
以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:php伪造引荐者请求防盗链资源的详细说明是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。