欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET 图片防盗链的实现原理分析

程序员文章站 2024-03-08 12:13:04
那么我来介绍下图片放盗链的一个方法 首先,添加个httphandlers请求,webconfig部分配置节如下:
那么我来介绍下图片放盗链的一个方法
首先,添加个httphandlers请求,webconfig部分配置节如下:
<httphandlers>
<add verb="*" path="*.jpg" type="myhandler,app_code"/>
</httphandlers> 注意:对应于system.web之下,别添错了哦!
然后添加个class,取名为myhandler继承于ihttphandler
class原型如下:
复制代码 代码如下:

using system;
using system.data;
using system.configuration;
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 class myhandler : ihttphandler
{
public void processrequest(httpcontext context)
{
string filename = context.server.mappath(context.request.filepath);
if (context.request.urlreferrer.host == null)
{
context.response.contenttype = "image/jpeg";
context.response.writefile("~/images/no.png");//被替换图片
}
else
{
if (context.request.urlreferrer.host.indexof("localhost") > -1)//这里是你的域名
{
context.response.contenttype = "image/jpeg";
context.response.writefile(filename);
}
else
{
context.response.contenttype = "image/jpeg";
context.response.writefile("~/images/no.png");
}
}
}
public bool isreusable
{
get { return true; }
}
public myhandler()
{
}
}

myhandler继承自ihttphandler实现了对url来源来判断jpg图片是否被盗链,本class中以localhost为例,修改localhost和images/no.png参数即可
次方法也可应用于url伪静态。
下一次聊下图片与asp.net程序的服务器分离,欢迎大家光临本站。

下面是补充
所谓url静态化(声明下:这里说的是伪静态,真正网页静态化就不说了可以用最简单的请求返回response实现,但好像久而久之数据量会很庞大,所以就不说了)就是把动态的网页看起来像静态的一样。如:aspnet.aspx?id=5 静态化:aspnet-5.html或/aspnet/5

seo(搜索引擎优化),更青睐于静态化的网页,所以网页静态化对于专业的seoer来说还是必须掌握的,下面我告诉大家一个方法来实现在asp.net下面的网页静态化。

下面给一个demo,下载地址:


这个demo实现了网页的url的伪静态,其原理通过匹配url的正则,来进行网页重定向,这个demo里面有这么个config,<add virtualurl="~/microsoft*.*" destinationurl="~/default.aspx" />
也就是说请求microsoft.html,microsoft.shtml,microsoft.do都会映射到default.aspx

这个正则把url重定向一个页面,没有带参数,我先来介绍下带参数如何实现,下面我加了这个规则
<add virtualurl="~/default-([0-9]*)" destinationurl="~/default.aspx?id=$1" />
这个正则匹配了,这样的url(假设http://www.xx.com/是你的域名), www.xx.com/microsoft-123 映射到www.xx.com/default.aspx?id=123
那么就实现了参数的传递

多个参数的传递可以用如下正则实现,各位高手想用什么样的静态化规则就自己写正则怎么实现吧,下面我给出一种目录化的url伪静态规则
<add virtualurl="~/default/([a-za-z0-9]*)/([a-za-z0-9]*)" destinationurl="~/default.aspx?par1=$1&par2=$2" />这里要注意的就是&(&)