图片盗链分析(一)

简介: 现在探讨一下网站图片防盗链 一步一步的进行。 (一) 一个网页中对同域的图片的访问 [准备]在Vs中添加一网站,添加images图片文件夹,里边放一张a1.gif的图片,一张用于显示防盗链的图片z1.

现在探讨一下网站图片防盗链

一步一步的进行。

(一) 一个网页中对同域的图片的访问

[准备]Vs中添加一网站,添加images图片文件夹,里边放一张a1.gif的图片,一张用于显示防盗链的图片z1.gif

(1) Aspx

<form id="form1" runat="server">

    <div>

        <img src="images/a1.gif" />  

    </div>

    </form>

(2)在浏览器中访问

2个访问请求(只取2个属性来分析):

<1>请求Default.aspx

·(Request-Line)GET /Default.aspx HTTP/1.1

·Host192.168.1.105:8029

<2>请求图片

·(Request-Line)GET /images/a1.gif HTTP/1.1

·Host192.168.1.105:8029

·Referer http://192.168.1.105:8029/Default.aspx

 

第一次请求的时候没有Referer属性值(或说为null)。第二次请求是访问资源文件,这时,Referer就包含了一个对资源文件的容器的地址,即图片a1.gif来自于http://192.168.1.105:8029/Default.aspx

注:http标准协议中有专门的字段记录referer:一来可以追溯上一个入站地址是什么;二来对于资源文件,可以跟踪到包含显示他的网页地址是什么

(二)另一网站对图片的跨域链接

把上一个网站在IIS中发布,然后在Vs中新建立网站。网站中在Test.aspx中添加图片

(1)aspx文件

<form id="form1" runat="server">

    <div>

        <img src="http://192.168.1.105:8029/images/a1.gif" />

    </div>

    </form>

(2)在浏览器中访问

2个请求

<1>请求Test.aspx

·(Request-Line) GET /web2/Test.aspx HTTP/1.1

·Hostlocalhost:20372

<2>请求图片资源

·(Request-Line)GET /images/a1.gif HTTP/1.1

·Host192.168.1.105:8029

·Refererhttp://localhost:20372/web2/Test.aspx

在第一次请求时,此时要向localhost请求Test.aspx。在第二次请求中,请求资源文件a1.gif,这时要访问的主机地址为:192.168.1.105:8029,这个就是在IIS中发布的图片的源服务器。而Referer还是Test.aspx所在的网站的请求地址。也就是图片a1.gif的的包含容器。这两个地址不同了,可以利用这个特征来防止图片的盗链:如果资源文件的(直接)包含地址与源地址相同则可以使用图片,否则就是盗链。

(三)添加图片过滤img.ashx文件

context.Response.ContentType = "image/jpg";

        if (context.Request.UrlReferrer != null &&

context.Request.UrlReferrer.Host.Equals(context.Request.Url.Host,

StringComparison.InvariantCultureIgnoreCase))

            context.Response.WriteFile(context.Server.MapPath("~/images/" +

context.Request.QueryString["img"]));

        else

            context.Response.WriteFile(context.Server.MapPath("~/images/z1.gif"));

 

ContentType设置为图片。判断当请求的(图片)资源的源地址(Host)与直接引用地址(Referere)相同,才可以返回请求的图片,否则把图片引用指向自定义的防盗图片。此时的图片引用要改成:

<img src="Img.ashx?img=a1.gif" />

(四)通过加防盗的同域资源访问

(1)default.aspx文件

图片引用改为:<img src="Img.ashx?img=a1.gif" />

(2)在浏览器中浏览

两个请求

<1>请求default.aspx

·(Request-Line)GET /Default.aspx HTTP/1.1

·Host192.168.1.105:8029

<2>请求图片资源

·(Request-Line)GET /Img.ashx?img=a1.gif HTTP/1.1

·Host192.168.1.105:8029

·Refererhttp://192.168.1.105:8029/Default.aspx

第二次请求中,hostrefererHost部分相同,则返回正常的图片

(五)异域访问

(1)在网站2中,添加对图片的访问

<form id="form1" runat="server">

    <div>

        <img src="http://192.168.1.105:8029/Img.ashx?img=a1.gif" />

    </div>

</form>

(2)在浏览器中访问

<1>请求Test.aspx

·(Request-Line)GET /web2/Test.aspx HTTP/1.1

·Hostlocalhost:20372

<2>请求资源文件

·(Request-Line)GET /Img.ashx?img=a1.gif HTTP/1.1

·Host192.168.1.105:8029

·Refererhttp://localhost:20372/web2/Test.aspx

 

请求资源文件时,资源文件地址:Host,直接包含地址,refererhostrefererhost地址不同,所以得到的图片地址是一个防盗的图片地址。

       

(未完……

注:

http头里的两个属性

Host:客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号

Referer:浏览器向 WEB 服务器表明自己是从哪个网页/URL 获得/点击 当前请求中的网址/URL

博客园大道至简

http://www.cnblogs.com/jams742003/

转载请注明:博客园

目录
相关文章
|
弹性计算 对象存储 CDN
2023年阿里云流量计费标准价格表
2023年阿里云流量计费标准价格表,阿里云服务器公网带宽计费模式按固定带宽和按使用流量哪个划算?阿里云百科以北京地域为例,按固定带宽计费1M带宽一个月23元,按使用流量计费1GB流量0.8元,如果云服务器带宽使用率低于10%,那么首选按使用流量计费,如果带宽实际利用率较高的话,按固定带宽计费更划算一些
5128 0
2023年阿里云流量计费标准价格表
|
Linux 网络安全
SSH远程会话管理工具 - screen使用教程
2010年10月15日 下午 | 作者:VPS侦探 VPS侦探在刚接触Linux时最怕的就是SSH远程登录Linux VPS编译安装程序时(比如安装lnmp)网络突然断开,或者其他情况导致不得不与远程SSH服务器链接断开,远程执行的命令也被迫停止,只能重新连接,重新运行。
1341 0
|
11天前
|
弹性计算 关系型数据库 微服务
基于 Docker 与 Kubernetes(K3s)的微服务:阿里云生产环境扩容实践
在微服务架构中,如何实现“稳定扩容”与“成本可控”是企业面临的核心挑战。本文结合 Python FastAPI 微服务实战,详解如何基于阿里云基础设施,利用 Docker 封装服务、K3s 实现容器编排,构建生产级微服务架构。内容涵盖容器构建、集群部署、自动扩缩容、可观测性等关键环节,适配阿里云资源特性与服务生态,助力企业打造低成本、高可靠、易扩展的微服务解决方案。
1237 5
|
10天前
|
机器学习/深度学习 人工智能 前端开发
通义DeepResearch全面开源!同步分享可落地的高阶Agent构建方法论
通义研究团队开源发布通义 DeepResearch —— 首个在性能上可与 OpenAI DeepResearch 相媲美、并在多项权威基准测试中取得领先表现的全开源 Web Agent。
1217 87
|
11天前
|
云栖大会
阿里云云栖大会2025年9月24日开启,免费申请大会门票,速度领取~
2025云栖大会将于9月24-26日举行,官网免费预约畅享票,审核后短信通知,持证件入场
1798 13
|
20天前
|
人工智能 运维 安全