仓酷云
标题:
ASP.NET网站制作之图片地点防盗链,经由过程IHttpHandler完成
[打印本页]
作者:
再现理想
时间:
2015-1-16 22:46
标题:
ASP.NET网站制作之图片地点防盗链,经由过程IHttpHandler完成
我觉得这个学习方法很重要。初学者应该跟我一样有同样一个毛病。那就是急于求成。很想就自己做出个小小的系统来。可真要动手,却又茫然而不知所措。为什么会这样呢?因为我们没有耐心去学习基础知识。写根本看不到什么效果的测试代码。防盗链/*
*
*防盗链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毛病信息提醒图片高
*
*
*
*
*
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
///
///</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;
}
}
}
}
}
计算机发展到这个时候,很多技术日益成熟,想学好一种技术都是不容易的,当你学会用的时候你对它的很多原理可能很不了解)
作者:
飘灵儿
时间:
2015-1-19 23:25
现在的ASP.net分为两个版本:1.1和2.0Asp.net1.1用VS2003(visualstudio2003)编程。Asp.net2.0用VS2005(visualstudio2005)编程。现在一般开发用的是VS2003。
作者:
柔情似水
时间:
2015-1-26 11:59
ASP(ActiveServerPages)是Microsfot公司1996年11月推出的WEB应用程序开发技术,它既不是一种程序语言,也不是一种开发工具,而是一种技术框架,不须使用微软的产品就能编写它的代码。
作者:
深爱那片海
时间:
2015-2-4 14:43
弱类型造成潜在的出错可能:尽管弱数据类型的编程语言使用起来回方便一些,但相对于它所造成的出错几率是远远得不偿失的。
作者:
精灵巫婆
时间:
2015-2-10 01:42
Servlet的形式和前面讲的CGI差不多,它是HTML代码和后台程序分开的。它们的启动原理也差不多,都是服务器接到客户端的请求后,进行应答。不同的是,CGI对每个客户请求都打开一个进程(Process)。
作者:
第二个灵魂
时间:
2015-2-28 13:09
比如封装性、继承性、多态性等等,这就解决了刚才谈到的ASP的那些弱点。封装性使得代码逻辑清晰,易于管理,并且应用到ASP.Net上就可以使业务逻辑和Html页面分离,这样无论页面原型如何改变。
作者:
活着的死人
时间:
2015-3-9 23:48
我觉得什么语言,精通就好,你要做的就是比其他80%的人都厉害,你就能得到只有20%的人才能得到的高薪。
作者:
再现理想
时间:
2015-3-17 03:10
市场决定一切,我个人从经历上觉得两者至少在很长时间内还是要共存下去,包括C和C++,至少从找工作就看得出来,总不可能大家都像所谓的时尚一样,追捧一门语言并应用它。
作者:
冷月葬花魂
时间:
2015-3-23 18:02
如今主流的Web服务器软件主要由IIS或Apache组成。IIS支持ASP且只能运行在Windows平台下,Apache支持PHP,CGI,JSP且可运行于多种平台,虽然Apache是世界使用排名第一的Web服务器平台。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2