IIS图片防盗链和下载的解决方案

下面我将详细讲解如何实现“IIS图片防盗链和下载的解决方案”。

一、背景

在Web开发和运营过程中,图片防盗链和下载一直是一个受关注的问题。一方面,防止他人盗取图片资产,影响客户体验和降低网站流量和排名;另一方面,提供图片下载功能给有需要的用户,方便他们体验和利用我们的图片资源。

二、解决方案

1. 防盗链

防盗链的实现原理是通过控制HTTP请求头中的Referer字段,判断请求是否来自指定的域名。如果是,则允许访问图片资源;否则返回指定的错误代码或图片。在IIS中,我们可以通过ISAPI过滤器来实现该功能。

1.1 编写ISAPI过滤器

我们可以使用C++或C#等编程语言编写ISAPI过滤器。在这里,我使用C++编写一个简单的过滤器,实现防盗链功能。具体代码如下:

#include "stdafx.h"
#include "Httpfilt.h"
#include "stdio.h"
#include "string.h"

// 防盗链规则
#define ALLOW_REFERER "www.example.com"

// 过滤函数
DWORD WINAPI HttpFilterProc(PHTTP_FILTER_CONTEXT pfc, DWORD dwNotificationType, LPVOID pvNotification)
{
    DWORD dwRetVal = SF_STATUS_REQ_NEXT_NOTIFICATION;
    switch (dwNotificationType)
    {
    case SF_NOTIFY_URL_MAP:
    case SF_NOTIFY_PREPROC_HEADERS:
    {
        HTTP_FILTER_PREPROC_HEADERS* pHeaders = (HTTP_FILTER_PREPROC_HEADERS*)pvNotification;
        const char* pszReferer = pHeaders->GetHeader(pfc, "Referer");
        if (pszReferer && strstr(pszReferer, ALLOW_REFERER) == 0)
        {
            // 非法访问,返回错误代码和图片
            pHeaders->SetHeader(pfc, "Content-Type", "image/png");
            pHeaders->SetHeader(pfc, "Status", "403 Forbidden");
            pHeaders->SetHeader(pfc, "Cache-Control", "no-cache");
            pHeaders->WriteClient(pfc, "403 Forbidden\n");
            pHeaders->WriteClient(pfc, "您无权访问该资源\n");
            pHeaders->WriteClient(pfc, "请联系网站管理员\n");
            dwRetVal = SF_STATUS_REQ_FINISHED;
        }
        break;
    }
    }
    return dwRetVal;
}

// 入口函数
BOOL WINAPI GetFilterVersion(PHTTP_FILTER_VERSION pVer)
{
    pVer->dwFilterVersion = HTTP_FILTER_REVISION;
    pVer->dwFlags = SF_NOTIFY_PREPROC_HEADERS | SF_NOTIFY_URL_MAP;
    strcpy(pVer->lpszFilterDesc, "Anti-leech filter");
    return TRUE;
}

// DllMain函数
BOOL APIENTRY DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
{
    if (dwReason == DLL_PROCESS_ATTACH || dwReason == DLL_PROCESS_DETACH)
        DisableThreadLibraryCalls(hModule);
    return TRUE;
}

在代码中,我们首先定义了防盗链的规则为ALLOW_REFERER,表示只有来自www.example.com的请求才合法。

然后编写了一个HttpFilterProc函数,这个函数是过滤器的主要逻辑。当收到HTTP请求时,过滤器会先获取并检查Referer是否符合规则,如果不符合,则返回403错误和错误信息。

最后,我们在入口函数GetFilterVersion中设置过滤器的版本号、工作模式和描述信息。

1.2 部署ISAPI过滤器

接下来,我们需要将编写好的ISAPI过滤器部署到IIS中。具体步骤如下:

  1. 将编写好的.dll文件复制到IIS的安装目录下的“ISAPI”文件夹中。

  2. 打开IIS管理器,在对应的网站或虚拟目录下选择“ISAPI筛选器”。

  3. 点击“添加”,输入过滤器名称和ISAPI动态链接库的文件名。

  4. 设置ISAPI过滤器的优先级,将其放在其他过滤器的前面。

至此,ISAPI过滤器的部署已完成。我们可以在浏览器中访问图片资源,看看是否符合规则。

2. 图片下载

图片下载可以为有需要的用户提供方便快捷的下载链接,以便他们使用和分享我们的图片。在IIS中,我们可以通过额外的URL重定向模块来实现该功能。

2.1 编写URL重定向模块

与ISAPI过滤器相比,URL重定向模块的编写相对简单,只需要一段Rule即可。具体代码如下:

<rewrite>
  <rules>
    <rule name="Download image" stopProcessing="true">
      <match url="^download/([^/]+)/(\d+)/([^/]+)$" />
      <action type="Rewrite" url="/images/{R:1}/{R:2}/{R:3}" />
      <conditions>
        <add input="{HTTP_USER_AGENT}" pattern="MSIE" negate="true" />
      </conditions>
      <serverVariables>
        <set name="RESPONSE_Content-Disposition" value="attachment; filename={R:3}" />
        <set name="RESPONSE_Content-Type" value="image/jpeg" />
      </serverVariables>
    </rule>
  </rules>
</rewrite>

这里的Rule定义了一个匹配模式,当URL符合“/download/{folder}/{id}/{filename}”时,则重定向到/images/{folder}/{id}/{filename}。同时,根据HTTP请求头中的User-Agent判断是否是IE浏览器,并设置Content-Disposition和Content-Type,以便浏览器正确地保存文件。

2.2 部署URL重定向模块

与ISAPI过滤器不同的是,URL重定向模块不需要编译和部署,只需要在IIS中开启Rewrite模块即可。具体步骤如下:

  1. 打开IIS管理器,在对应的网站或虚拟目录下选择“URL重写”。

  2. 点击“添加规则”,选择“空白规则”。

  3. 输入规则名称,并在“匹配模式”中输入/^download\/([^\/]+)\/(\d+)\/([^\/]+)$/i。

  4. 在“操作”中选择“重写请求”为/images/{R:1}/{R:2}/{R:3}。

  5. 在“条件”中加入“{HTTP_USER_AGENT}”不为“MSIE”时。

  6. 在“服务器变量”中添加“RESPONSE_Content-Disposition”为“attachment; filename={R:3}”和“RESPONSE_Content-Type”为“image/jpeg”。

  7. 点击“应用”或“添加规则”。

至此,URL重定向模块的配置已完成。我们可以在浏览器中访问/download/{folder}/{id}/{filename},看看是否正确下载了图片。

三、总结

本文主要介绍了IIS图片防盗链和下载的解决方案。其中,防盗链的实现需要编写ISAPI过滤器,通过检查HTTP请求头中的Referer实现防止盗链。而图片下载则需要使用URL重定向模块,将特定的URL重定向到图片资源的真实位置,并设置响应头内容,方便用户下载和保存。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:IIS图片防盗链和下载的解决方案 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 帝国CMS7.0IIS伪静态设置教程

    帝国CMS7.0IIS伪静态设置教程 伪静态,指的是将动态生成的网址伪装成静态网址,使得搜索引擎更容易抓取和索引。下面,我们将介绍如何在IIS上设置帝国CMS7.0的伪静态。 步骤一:安装URL重写模块 在IIS上安装URL重写模块,这一步非常重要。安装完毕后,便可以使用该模块的众多高效功能,比如伪静态。 步骤二:创建web.config文件 在网站的根目录…

    IIS 2023年5月26日
    00
  • iisvdir.vbs iis虚拟目录管理脚本使用介绍

    iisvdir.vbs iis虚拟目录管理脚本使用介绍 iisvdir.vbs是什么 iisvdir.vbs是一款iis虚拟目录管理脚本,可以通过执行iisvdir.vbs脚本实现对iis虚拟目录的创建、删除、修改等操作。 iisvdir.vbs的使用方法 首先需要在windows系统上安装iis,并将iisvdir.vbs脚本放置到可执行文件的路径下。接下…

    IIS 2023年5月26日
    00
  • 收集的一些经典的vbs脚本大全

    收集经典的VBS脚本主要是为了方便程序员进行日常工作,提高编程效率,下面是具体的攻略: 收集VBS脚本的来源 首先,我们需要寻找来源,可以通过以下方式: 1. 在GitHub或其他代码托管平台上搜索 在GitHub等代码托管平台中搜索关键字”VBS”,可以找到许多开源的VBS脚本库,可以自由下载使用或进行修改。 2. 查询VBS脚本相关的论坛和博客 在国外的…

    IIS 2023年5月26日
    00
  • IIS7.5使用web.config设置伪静态的二种方法

    下面我将详细讲解IIS7.5使用web.config设置伪静态的两种方法。 什么是伪静态? 伪静态,是指在URL的基础上组合出一组符合用户所需的静态可读性好的网页地址,同时能够满足搜索引擎优化的需要。伪静态与动态对应,所谓伪静态其实就是URL重写技术。 伪静态技术的本质是将特定的URL转换成符合搜索引擎和用户要求的静态URL,而且不改变原始URL的指向,实际…

    IIS 2023年5月26日
    00
  • IIS环境下部署项目的详细教程

    部署Web项目到IIS(Internet Information Services)环境中,需要完成以下步骤: 安装IIS服务 在部署Web项目之前,需要先安装IIS服务。在Windows操作系统中,可以通过控制面板->程序->Windows功能中打开或关闭功能,勾选“Internet Information Services”选项来安装。 创建…

    IIS 2023年5月26日
    00
  • iis应用程序池监控方法实例

    IIS应用程序池监控方法实例 什么是IIS应用程序池? IIS(Internet Information Services)是微软开发的Web服务器软件。在IIS中,应用程序池用于隔离Web应用程序。若某个Web应用程序崩溃或出现其他问题,应用程序池可以保证该问题不会影响到其他Web应用程序。同时,应用程序池中也包含了应用程序的生命周期管理,因此可以使用应用…

    IIS 2023年5月26日
    00
  • win7 win10开启IIS服务的教程图解

    Win7&Win10开启IIS服务的教程图解 1. 安装IIS服务 进入“控制面板” > “程序和功能” > “开启或关闭Windows功能” 勾选“Internet信息服务”及其子功能,点击“确认” 2. 配置IIS服务 进入“IIS工具管理器” > “运行” > 输入“inetmgr” 在左侧的“连接”面板下点击计算机名称…

    IIS 2023年5月26日
    00
  • IIS 上传文件大小配置步骤(默认200K)

    下面是 “IIS 上传文件大小配置步骤(默认200K)” 的完整攻略。 1. 打开 IIS 管理器 首先需要打开 IIS 管理器,可以通过在 Windows 服务器上执行以下步骤进行打开: 点击“开始”菜单,在搜索框中输入 “IIS”,然后打开 “Internet Information Services (IIS) 管理器”。 或者在 Windows 服务…

    IIS 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部