兰色精灵 发表于 2015-1-16 22:31:11

ASP.NET编程:asp.net防盗链源码

我实在想不明白java的机制,为什么非要那么蛋疼,在同一个平台下重复编译。asp.net|防盗链
/**//*
*
*防盗链IHttpHandler
*
*
*增添了对文件关头字的选择(即仅对文件名存在某些关头字或不存在某些关头字举行过滤)
*设置web.config中<appSettings>节以下值
*stringeWebapp_NoLink假如文件名切合该准确亮相式将举行过滤(不设置对一切举行过滤)
*stringeWebapp_AllowLink假如文件名切合该准确亮相式将不举行过滤(优先权高于AllowLink,不设置则从命AllowLink)
*booleWebapp_AllowOnlyFile假如为False,(默许true)则不同意用户间接对该文件举行会见倡议为true
*
*
*:)以下设置都可省略,设置只是为了增添天真性与体验
*eWebapp_NoLink_Message毛病信息提醒:默许为LinkFrom:域名
*eWebapp_Error_Width毛病信息提醒图片宽
*eWebapp_Error_Height毛病信息提醒图片高
*
*
*
*渣滓猪2005-9-11创立
*http://ewebapp.net
*/

usingSystem;
usingSystem.Web;
usingSystem.Drawing;
usingSystem.Drawing.Imaging;
usingSystem.IO;
usingSystem.Configuration;
usingSystem.Text.RegularExpressions;
namespaceeWebapp
...{
/**////<summary>
///防盗链IHttpHandler
///参考http://www.softat.org/archiver/tid-52114.html
///渣滓猪2005-9-12修改
///</summary>
publicclassNoLink:IHttpHandler
...{
privatestringeWebapp_NoLink=string.Empty;
privatestringeWebapp_AllowLink=string.Empty;
privatebooleWebapp_AllowOnlyFile=true;
privatestringeWebapp_NoLink_Message=string.Empty;
privateboolerror=false;
publicNoLink()
...{
//
//TODO:在此处增加机关函数逻辑
//
}
publicvoidProcessRequest(HttpContextcontext)
...{
eWebapp_NoLink_Message=ConfigurationSettings.AppSettings["eWebapp_NoLink_Message"];


stringmyDomain=string.Empty;
error=errorLink(context,outmyDomain);
if(Empty(eWebapp_NoLink_Message))
...{
eWebapp_NoLink_Message="Linkfrom:"+myDomain;
}
if(error)
...{
//Jpg(context.Response,eWebapp_NoLink_Message);
Jpg(context.Response,eWebapp_NoLink_Message);
}
else
...{
Real(context.Response,context.Request);
}
}
publicboolIsReusable
...{
get
...{
returntrue;
}
}

/**////<summary>
///输入毛病信息
///</summary>
///<paramname="Response"></param>
///<paramname="_word"></param>
privatevoidJpg(HttpResponseResponse,string_word)
...{

intmyErrorWidth=_word.Length*15;
intmyErrorHeight=16;
try
...{
int_myErrorWidth=Convert.ToInt32(ConfigurationSettings.AppSettings["eWebapp_Error_Width"]);
if(_myErrorWidth>0)
...{
myErrorWidth=_myErrorWidth;
}
}
catch
...{
}
try
...{
int_myErrorHeight=Convert.ToInt32(ConfigurationSettings.AppSettings["eWebapp_Error_Height"]);
if(_myErrorHeight>0)
...{
myErrorHeight=_myErrorHeight;
}
}
catch
...{
}
BitmapImg=null;
Graphicsg=null;
MemoryStreamms=null;
Img=newBitmap(myErrorWidth,myErrorHeight);
g=Graphics.FromImage(Img);
g.Clear(Color.White);
Fontf=newFont("Arial",9);
SolidBrushs=newSolidBrush(Color.Red);
g.DrawString(_word,f,s,3,3);
ms=newMemoryStream();
Img.Save(ms,ImageFormat.Jpeg);
Response.ClearContent();
Response.ContentType="image/Gif";
Response.BinaryWrite(ms.ToArray());
g.Dispose();
Img.Dispose();
Response.End();
}
/**////<summary>
///输入实在文件
///</summary>
///<paramname="response"></param>
///<paramname="context"></param>
privatevoidReal(HttpResponseresponse,HttpRequestrequest)
...{
FileInfofile=newSystem.IO.FileInfo(request.PhysicalPath);
response.Clear();
response.AddHeader("Content-Disposition","filename="+file.Name);
response.AddHeader("Content-Length",file.Length.ToString());
stringfileExtension=file.Extension.ToLower();

//这里选择输入的文件格局
//能够参考http://ewebapp.cnblogs.com/articles/234756.html增添对更多文件格局的撑持.

switch(fileExtension)
...{
case"mp3":
response.ContentType="audio/mpeg3";
break;
case"mpeg":
response.ContentType="video/mpeg";
break;
case"jpg":
response.ContentType="image/jpeg";
break;
case"bmp":
response.ContentType="image/bmp";
break;
case"gif":
response.ContentType="image/gif";
break;
case"doc":
response.ContentType="application/msword";
break;
case"css":
response.ContentType="text/css";
break;
default:
response.ContentType="application/octet-stream";
break;
}

response.WriteFile(file.FullName);
response.End();
}

/**////<summary>
///确认字符串是不是为空
///</summary>
///<paramname="_value"></param>
///<returns></returns>
privateboolEmpty(string_value)
...{
if(_value==null|_value==string.Empty|_value=="")
...{
returntrue;
}
else
...{
returnfalse;
}
}

/**////<summary>
///反省是不是长短法链接
///</summary>
///<paramname="context"></param>
///<paramname="_myDomain"></param>
///<returns></returns>
privateboolerrorLink(HttpContextcontext,outstring_myDomain)
...{
HttpResponseresponse=context.Response;
stringmyDomain=context.Request.ServerVariables["SERVER_NAME"];
_myDomain=myDomain;
stringmyDomainIp=context.Request.UserHostAddress;

eWebapp_NoLink=ConfigurationSettings.AppSettings["eWebapp_NoLink"];
eWebapp_AllowLink=ConfigurationSettings.AppSettings["eWebapp_AllowLink"];
try
...{
eWebapp_AllowOnlyFile=Convert.ToBoolean(ConfigurationSettings.AppSettings["eWebapp_AllowOnlyFile"]);
}
catch
...{
eWebapp_AllowOnlyFile=true;
}

if(context.Request.UrlReferrer!=null)
...{

//判断referDomain是不是存在网站的IP或域名
stringreferDomain=context.Request.UrlReferrer.AbsoluteUri.Replace(context.Request.UrlReferrer.AbsolutePath,"");
stringmyPath=context.Request.RawUrl;
if(referDomain.IndexOf(myDomainIp)>=0|referDomain.IndexOf(myDomain)>=0)
...{
returnfalse;
}
else
...{
//这里利用正则表达对划定规矩举行婚配
try
...{
RegexmyRegex;
//反省同意婚配
if(!Empty(eWebapp_AllowLink))
...{

myRegex=newRegex(eWebapp_AllowLink);
if(myRegex.IsMatch(myPath))
...{
returnfalse;
}
}

//反省克制婚配
if(!Empty(eWebapp_NoLink))
...{
myRegex=newRegex(eWebapp_NoLink);
if(myRegex.IsMatch(myPath))
...{
returntrue;
}
else
...{
returnfalse;
}
}
returntrue;
}
catch
...{
//假如婚配堕落,链接毛病
returntrue;
}
}
}
else
...{
//是不是同意间接会见文件
if(eWebapp_AllowOnlyFile)
...{
returnfalse;
}
else
...{
returntrue;
}
}
}
}
}

它有很多缺点的,有兴趣可以到网上去搜索一下。于是微软有发明了“下一代”C++:C++/CLI语言,这个可以解决在.NETFramework中,托管C++产生的问题。在《程序员》杂志上,lippman和李建中合作连载介绍了C++/CLI语言。

因胸联盟 发表于 2015-1-19 15:59:30

ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。

透明 发表于 2015-1-28 07:53:44

主流网站开发语言之CGI:CGI就是公共网关接口(CommonGatewayInterface)的缩写。它是最早被用来建立动态网站的后台技术。这种技术可以使用各种语言来编写后台程序,例如C,C++,Java,Pascal等。

活着的死人 发表于 2015-2-5 19:48:23

代码逻辑混乱,难于管理:由于ASP是脚本语言混合html编程,所以你很难看清代码的逻辑关系,并且随着程序的复杂性增加,使得代码的管理十分困难,甚至超出一个程序员所能达到的管理能力,从而造成出错或这样那样的问题。

小女巫 发表于 2015-2-13 09:55:25

ASP.NET可以无缝地与WYSIWYGHTML编辑器和其他编程工具(包括MicrosoftVisualStudio.NET)一起工作。这不仅使得Web开发更加方便,而且还能提供这些工具必须提供的所有优点,包括开发人员可以用来将服务器控件拖放到Web页的GUI和完全集成的调试支持。微软为ASP.net设计了这样一些策略:易于写出结构清晰的代码、代码易于重用和共享、可用编译类语言编写等等,目的是让程序员更容易开发出Web应用,满足计算向Web转移的战略需要。

飘飘悠悠 发表于 2015-3-3 20:02:54

使用普通的文本编辑器编写,如记事本就可以完成。由脚本在服务器上而不是客户端运行,ASP所使用的脚本语言都在服务端上运行,用户端的浏览器不需要提供任何别的支持,这样大提高了用户与服务器之间的交互的速度。

山那边是海 发表于 2015-3-11 13:21:40

ASP.Net摆脱了以前ASP使用脚本语言来编程的缺点,理论上可以使用任何编程语言包括C++,VB,JS等等,当然,最合适的编程语言还是MS为.NetFrmaework专门推出的C(读csharp)。

蒙在股里 发表于 2015-3-18 16:52:58

以上是语言本身的弱点,在功能方面ASP同样存在问题,第一是功能太弱,一些底层操作只能通过组件来完成,在这点上是远远比不上PHP/JSP,其次就是缺乏完善的纠错/调试功能,这点上ASP/PHP/JSP差不多。

海妖 发表于 2015-3-26 06:44:14

当然我们在选择Asp.net主机是,除了要考虑服务提供商在版本是否是实时更新以外,机房的环境和配置也是非常重要的,通常选择骨干网的机房,在速度和稳定性上会非常有保证。
页: [1]
查看完整版本: ASP.NET编程:asp.net防盗链源码