Maison base de données tutoriel mysql IHttpHandler的妙用(2):防盗链!我的资源只有我的用户才能下

IHttpHandler的妙用(2):防盗链!我的资源只有我的用户才能下

Jun 07, 2016 pm 03:00 PM
seulement 妙用 用户 资源

昨天粗略讲了一下IHttpHandler接口的作用和动态给图片添加水印的处理,如果对这些不太清除的朋友,建议看看这篇《IHttpHandler的妙用(1):给图片添加水

 昨天粗略讲了一下IHttpHandler接口的作用和动态给图片添加水印的处理,如果对这些不太清除的朋友,建议看看这篇《IHttpHandler的妙用(1):给图片添加水印》:http://blog.csdn.net/zhoufoxcn/archive/2008/01/10/2033530.aspx

昨天也提到了IHttpHandler接口主要有一个IsReusable属性和一个ProcessRequest方法,利用这个方法我们可以处理很多事情的,昨天我们利用了这个方法给图片动态添加了水印,今天我再来展示另一种用法。

大家查看一个msdn,可以看到它的声明如下:

Visual Basic(声明) 
Sub ProcessRequest ( _
    context As HttpContext _
)
 
Visual Basic(用法) 
Dim instance As IHttpHandler
Dim context As HttpContext

instance.ProcessRequest(context)
 
C# 
void ProcessRequest (
    HttpContext context
)

注意这个HttpContext对象,它提供对用于为 HTTP 请求提供服务的内部服务器对象(如 Request、Response、Session 和 Server)的引用。 

有了它我们就方便多了,因为我们的下载资源一般都会有一个下载介绍(假设为details.aspx?id=***),用户查看介绍之后,如果愿意下载,就会点击下载链接,这个链接也是一个页面(假设为download.aspx?id=***),我们就可以得出结论,只要是用户通过我们的网站下载这些资源,那么在下载资源之前访问那个页面(简称前导页,下同)一定是details.aspx,因此我们就可以得出结论只要是下载之前的前导页不是details.aspx这个页面,那个这个下载请求一定是别的网站盗链(其实还可以放宽一点,在下载之前的前导页一定是本站的页面,也还可以要求更紧一点,下载之前访问的页面的id值一定要与下载的id值一致,这就看大家的实际要求了)!

有了这个推论之后,我们就可以动手写代码了:

using System;
using System.IO;
using System.Web;

/// 


/// 说明:DownloadHandler是一个防盗链的类,它可以防止本站资源被别的网站盗用
/// 作者:周公
/// 日期:2008-1-11
/// 首发地址:http://blog.csdn.net/zhoufoxcn
/// 
public class DownloadHandler:IHttpHandler
{
    
public DownloadHandler()
    {
        
//
        
// TODO: 在此处添加构造函数逻辑
        
//
    }

    
#region IHttpHandler 成员
    
/// 
    
/// 指示IHttpHandler 实例是否可再次使用
    
/// 
    public bool IsReusable
    {
        
get { return true; }
    }
    
/// 
    
/// 处理请求的方法
    
/// 
    
/// 它提供对用于为 HTTP 请求提供服务的内部服务器对象(如 Request、Response、Session 和 Server)的引用。
    public void ProcessRequest(HttpContext context)
    {
        Uri referrerUri 
= context.Request.UrlReferrer;//获取下载之前访问的那个页面的uri
        Uri currentUri = context.Request.Url;
        
if (referrerUri == null)//没有前导页,直接访问下载页
        {
            
//输出提示,可以根据自身要求完善此处代码
            context.Response.Write("请不要盗链本站资源,请从首页访问。首页");
            
return;
        }
        
#region 判断前导页是否位于本站可以用此段代码
        
//if (referrerUri.Host == currentUri.Host)//前导页和当前请求页位于同一个主机
        
//{
        
//    //用户是通过正常路径访问的,向用户提供下载文件
        
//    //实际情况是根据id从数据库找到文件的物理路径,然后输出
        
//    //为了简单代码,仅仅演示流程,这里我直接输出了文件
        
//    //周公注。2008-1-11
        
//    //获取请求的物理文件路径
        
//    WriteFile(context);
        
//}
        
//else
        
//{
        
//    //输出提示,可以根据自身要求完善此处代码
        
//    context.Response.Write("请不要盗链本站资源,请从首页访问。首页");
        
//}
        #endregion
        
#region 判断前导页是否是我们的介绍页面
        
string referrerPage = referrerUri.LocalPath.Substring(referrerUri.LocalPath.LastIndexOf('/')+1);
        
if (referrerPage == "Details.aspx")//如果前导页是我们的介绍页面
        {
            
//用户是通过正常路径访问的,向用户提供下载文件
            
//实际情况是根据id从数据库找到文件的物理路径,然后输出
            
//为了简单代码,仅仅演示流程,这里我直接输出了文件
            
//周公注。2008-1-11
            
//获取请求的物理文件路径
            WriteFile(context);
        }
        
else
        {
            
//输出提示,可以根据自身要求完善此处代码
            context.Response.Write("请不要盗链本站资源,请从首页访问。首页");
        }
        
#endregion

    }

    
private void WriteFile(HttpContext context)
    {
        
//用户是通过正常路径访问的,向用户提供下载文件
        
//实际情况是根据id从数据库找到文件的物理路径,然后输出
        
//为了简单代码,仅仅演示流程,这里我直接输出了文件
        
//周公注。2008-1-11
        
//获取请求的物理文件路径
        string path = context.Request.PhysicalPath;
        
//注意这里rar文件的ContentType是application/octet-stream
        
//不同格式文件的contentType有可能不同
        context.Response.ContentType = "application/octet-stream";
        context.Response.WriteFile(path);
    }

    
#endregion
}

对web.config的配置:

xml version="1.0"?>

configuration>
    
appSettings>
        

        
add key="WaterMark" value="http://blog.csdn.net/zhoufoxcn"/>
        

        
add key="Font-Size" value="72"/>
    
appSettings>
    
connectionStrings/>
    
system.web>
        

        
compilation debug="true"/>
        

        
authentication mode="Windows"/>
        

        
httpHandlers>
      

            
add path="UploadImages/*.jpg" verb="*" type="ImageHandler"/>
      

      
add path="*.zip" verb="*" type="DownloadHandler"/>
      
add path="*.rar" verb="*" type="DownloadHandler"/>
      
add path="*.iso" verb="*" type="DownloadHandler"/>
        
httpHandlers>
    
system.web>
configuration>

前导页(Details.aspx):

@ Page Language="C#" AutoEventWireup="true" CodeFile="Details.aspx.cs" Inherits="Details" %>

DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

html xmlns="http://www.w3.org/1999/xhtml" >
head runat="server">
    
title>无标题页title>
head>
body>
    
form id="form1" runat="server">
    
div>
    
href="Download.aspx?id=1">下载a>
    
div>
    
form>
body>
html>

下载页没有什么html代码,主要是后台代码。下载页后台代码(Download.aspx.cs):

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class Download : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    {
        
if (!Page.IsPostBack)
        {
            CheckUser();
            
//实际情况是根据id从数据库找到文件的物理路径,然后输出
            
//为了简单代码,仅仅演示流程,这里我直接输出了文件
            
//周公注。2008-1-11
            
//首发地址:http://blog.csdn.net/zhoufoxcn
            Response.Redirect("download/demo.rar");//这里就会交给DownloadHanddler处理了
        }
    }
    
//检查用户登录等信息
    private void CheckUser()
    {
        
//仅仅演示,具体代码根据具体要求编写
        
//比如用户没有登录如何处理,用户没有下载权限如何处理等
        return;
    }
}

正常流程截图:
(一)先打开介绍页面:
IHttpHandler的妙用(2):防盗链!我的资源只有我的用户才能下
(二)点击下载链接进入下载页面:
IHttpHandler的妙用(2):防盗链!我的资源只有我的用户才能下
此时出现文件保存对话框,情况正常。

再看盗链情况(非正常情况):
(一)打开首页(非前导页,跳过这一步也没有关系)
IHttpHandler的妙用(2):防盗链!我的资源只有我的用户才能下
(二)直接访问下载页面或者直接访问下载文件的实际url地址:
IHttpHandler的妙用(2):防盗链!我的资源只有我的用户才能下
此时出现了我们自定义的错误提示,甚至地址栏上都出现了该文件的物理地址,可是就是没有办法下载,此时就算是利用迅雷等下载软件,下载到的也是一个无效的文件,如图:
IHttpHandler的妙用(2):防盗链!我的资源只有我的用户才能下
这样就达到我们的目地了,不是通过正常途径来下载是没有办法下载到他需要的文件的。

顺便说一下,写作本文时我是边编写代码边测试的(本博客原创的代码都是如此,测试通过之后方才发表,所以一般不会有什么问题,如果你学习的过程中发现有任何错误,请仔细检查你的代码,因为各人本地环境不同,出错原因各异,恕本人不一一指出你代码的错误之处)。

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment utiliser le compte Xiaohongshu pour trouver des utilisateurs ? Puis-je retrouver mon numéro de téléphone portable ? Comment utiliser le compte Xiaohongshu pour trouver des utilisateurs ? Puis-je retrouver mon numéro de téléphone portable ? Mar 22, 2024 am 08:40 AM

Avec le développement rapide des médias sociaux, Xiaohongshu est devenue l'une des plateformes sociales les plus populaires. Les utilisateurs peuvent créer un compte Xiaohongshu pour montrer leur identité personnelle et communiquer et interagir avec d'autres utilisateurs. Si vous avez besoin de trouver le numéro Xiaohongshu d’un utilisateur, vous pouvez suivre ces étapes simples. 1. Comment utiliser le compte Xiaohongshu pour trouver des utilisateurs ? 1. Ouvrez l'application Xiaohongshu, cliquez sur le bouton « Découvrir » dans le coin inférieur droit, puis sélectionnez l'option « Notes ». 2. Dans la liste des notes, recherchez la note publiée par l'utilisateur que vous souhaitez rechercher. Cliquez pour accéder à la page de détails de la note. 3. Sur la page de détails de la note, cliquez sur le bouton « Suivre » sous l'avatar de l'utilisateur pour accéder à la page d'accueil personnelle de l'utilisateur. 4. Dans le coin supérieur droit de la page d'accueil personnelle de l'utilisateur, cliquez sur le bouton à trois points et sélectionnez « Informations personnelles »

Les utilisateurs et groupes locaux sont manquants sur Windows 11 : comment l'ajouter Les utilisateurs et groupes locaux sont manquants sur Windows 11 : comment l'ajouter Sep 22, 2023 am 08:41 AM

L'utilitaire Utilisateurs et groupes locaux est intégré à la gestion de l'ordinateur et est accessible depuis la console ou indépendamment. Cependant, certains utilisateurs constatent que les utilisateurs et groupes locaux manquent dans Windows 11. Pour certaines personnes qui y ont accès, le message suggère que ce composant logiciel enfichable pourrait ne pas fonctionner avec cette version de Windows 10. Pour gérer les comptes d'utilisateurs pour cet ordinateur, utilisez l'outil Comptes d'utilisateurs dans le Panneau de configuration. Le problème a été signalé dans les itérations précédentes de Windows 10 et est généralement dû à des problèmes ou à des oublis de la part de l'utilisateur. Pourquoi les utilisateurs et groupes locaux sont-ils absents dans Windows 11 ? Vous exécutez l'édition Windows Home, les utilisateurs et groupes locaux sont disponibles sur l'édition Professional et supérieure. Activité

Connectez-vous à Ubuntu en tant que superutilisateur Connectez-vous à Ubuntu en tant que superutilisateur Mar 20, 2024 am 10:55 AM

Dans les systèmes Ubuntu, l'utilisateur root est généralement désactivé. Pour activer l'utilisateur root, vous pouvez utiliser la commande passwd pour définir un mot de passe, puis utiliser la commande su- pour vous connecter en tant que root. L'utilisateur root est un utilisateur disposant de droits d'administration système illimités. Il dispose des autorisations nécessaires pour accéder et modifier les fichiers, la gestion des utilisateurs, l'installation et la suppression de logiciels et les modifications de la configuration du système. Il existe des différences évidentes entre l'utilisateur root et les utilisateurs ordinaires. L'utilisateur root possède la plus haute autorité et des droits de contrôle plus étendus sur le système. L'utilisateur root peut exécuter des commandes système importantes et modifier des fichiers système, ce que les utilisateurs ordinaires ne peuvent pas faire. Dans ce guide, j'explorerai l'utilisateur root Ubuntu, comment se connecter en tant que root et en quoi il diffère d'un utilisateur normal. Avis

Explorez le guide Windows 11 : Comment accéder aux dossiers utilisateur sur votre ancien disque dur Explorez le guide Windows 11 : Comment accéder aux dossiers utilisateur sur votre ancien disque dur Sep 27, 2023 am 10:17 AM

Certains dossiers ne sont pas toujours accessibles en raison des autorisations, et dans le guide d'aujourd'hui, nous allons vous montrer comment accéder aux dossiers utilisateur sur votre ancien disque dur sous Windows 11. Le processus est simple mais peut prendre un certain temps, parfois même des heures, selon la taille du lecteur, alors soyez extrêmement patient et suivez exactement les instructions de ce guide. Pourquoi ne puis-je pas accéder à mes dossiers utilisateur sur mon ancien disque dur ? Les dossiers utilisateur appartiennent à un autre ordinateur, vous ne pouvez donc pas les modifier. Vous ne disposez d'aucune autorisation sur le dossier autre que la propriété. Comment ouvrir les fichiers utilisateur sur un ancien disque dur ? 1. Devenez propriétaire du dossier et modifiez les autorisations. Recherchez l'ancien répertoire utilisateur, cliquez dessus avec le bouton droit et sélectionnez Propriétés. Accédez à "Un

Tutoriel : Comment supprimer un compte utilisateur normal dans le système Ubuntu ? Tutoriel : Comment supprimer un compte utilisateur normal dans le système Ubuntu ? Jan 02, 2024 pm 12:34 PM

De nombreux utilisateurs ont été ajoutés au système Ubuntu. Je souhaite supprimer les utilisateurs qui ne sont plus utilisés. Comment les supprimer ? Jetons un coup d'œil au didacticiel détaillé ci-dessous. 1. Ouvrez la ligne de commande du terminal et utilisez la commande userdel pour supprimer l'utilisateur spécifié. Assurez-vous d'ajouter la commande d'autorisation sudo, comme indiqué dans la figure ci-dessous. 2. Lors de la suppression, assurez-vous d'être dans le répertoire des utilisateurs ordinaires. Je n'ai pas cette autorisation, comme le montre la figure ci-dessous. 3. Une fois la commande de suppression exécutée, comment juger si elle a été réellement supprimée ? Ensuite, nous utilisons la commande cat pour ouvrir le fichier passwd, comme le montre la figure ci-dessous 4. Nous voyons que les informations utilisateur supprimées ne sont plus dans le fichier passwd, ce qui prouve que l'utilisateur a été supprimé, comme le montre la figure ci-dessous. 5. Ensuite, nous entrons dans le fichier personnel

Qu'est-ce que sudo et pourquoi est-ce important ? Qu'est-ce que sudo et pourquoi est-ce important ? Feb 21, 2024 pm 07:01 PM

sudo (exécution du superutilisateur) est une commande clé dans les systèmes Linux et Unix qui permet aux utilisateurs ordinaires d'exécuter des commandes spécifiques avec les privilèges root. La fonction de sudo se reflète principalement dans les aspects suivants : Fournir un contrôle des autorisations : sudo réalise un contrôle strict sur les ressources système et les opérations sensibles en autorisant les utilisateurs à obtenir temporairement les autorisations de superutilisateur. Les utilisateurs ordinaires ne peuvent obtenir des privilèges temporaires via sudo qu'en cas de besoin et n'ont pas besoin de se connecter en permanence en tant que superutilisateur. Sécurité améliorée : en utilisant sudo, vous pouvez éviter d'utiliser le compte root lors des opérations de routine. L'utilisation du compte root pour toutes les opérations peut entraîner des dommages inattendus au système, car toute opération incorrecte ou imprudente bénéficiera de toutes les autorisations. et

Windows 11 KB5031455 ne parvient pas à s'installer, provoquant d'autres problèmes pour certains utilisateurs Windows 11 KB5031455 ne parvient pas à s'installer, provoquant d'autres problèmes pour certains utilisateurs Nov 01, 2023 am 08:17 AM

Microsoft a commencé à déployer KB2 auprès du public en tant que mise à jour facultative pour Windows 503145511H22 ou version ultérieure. Il s'agit de la première mise à jour à activer les fonctionnalités de Windows 11 Moment 4 par défaut, notamment Windows Copilot dans les zones prises en charge, la prise en charge de l'aperçu des éléments du menu Démarrer, le dissociation de la barre des tâches, etc. De plus, il corrige plusieurs bogues de Windows 11, notamment des problèmes de performances potentiels qui provoquaient des fuites de mémoire. Mais ironiquement, la mise à jour facultative de septembre 2023 sera un désastre pour les utilisateurs tentant d'installer la mise à jour, voire pour ceux qui l'ont déjà installée. De nombreux utilisateurs n'installeront pas ce Wi-Fi

Nouvelle version Win11 du dessin : supprimez l'arrière-plan en un seul clic pour réaliser la fonction de découpe Nouvelle version Win11 du dessin : supprimez l'arrière-plan en un seul clic pour réaliser la fonction de découpe Sep 15, 2023 pm 10:53 PM

Microsoft invite les membres du projet WindowsInsider dans les canaux Canary et Dev à tester et expérimenter la nouvelle application Paint. Le dernier numéro de version est 11.2306.30.0. La nouvelle fonctionnalité la plus remarquable de cette mise à jour de version est la fonction de découpe en un clic. Les utilisateurs n'ont besoin de cliquer qu'une seule fois pour éliminer automatiquement l'arrière-plan et mettre en évidence le corps principal de l'image, ce qui facilite les opérations ultérieures des utilisateurs. L'ensemble de l'étape est très simple. L'utilisateur importe l'image dans la nouvelle application de mise en page, puis clique sur le bouton « supprimer l'arrière-plan » de la barre d'outils pour supprimer l'arrière-plan de l'image. L'utilisateur peut également utiliser un rectangle pour sélectionner la zone à supprimer. l'arrière-plan.

See all articles