ASP.NET 防盗链的实现[HttpHandler]
有时我们需要防止其他网站直接引用我们系统中的图片,或下载文件链接。需要禁止盗链!在ASP.NET中可以方便的实现该功能!
做一个简单的盗链图片的示例,如下。新建立一个WebApplcation。新建立一个images文件夹,里面二张jpg图片,一张logo.jpg正常图片,一张用于提示非法盗链的图片Error.jpg图片。spring framework rce漏洞复现
页面default.aspx页面很简单。就一个图片如下
做一个简单的盗链图片的示例,如下。新建立一个WebApplcation。新建立一个images文件夹,里面二张jpg图片,一张logo.jpg正常图片,一张用于提示非法盗链的图片Error.jpg图片。spring framework rce漏洞复现
页面default.aspx页面很简单。就一个图片如下
<form id="form1" runat="server">
<div>
<img src="images/logo.jpg" />
</div>
</form>
<div>
<img src="images/logo.jpg" />
</div>
</form>
这里使用HttpHandler来处理盗链问题
新建立一个 一般处理程序 Handler1.ashx.代码及注释如下
新建立一个 一般处理程序 Handler1.ashx.代码及注释如下
public void ProcessRequest(HttpContext context)
{
//判断是否是本地网站引用图片,如果是则返回正确的图片
if (context.Request.UrlReferrer.Host == "localhost")
{
//设置客户端缓冲时间过期时间为0,即立即过期
context.Response.Expires = 0;
//清空服务器端为此会话开启的输出缓存
context.Response.Clear();
//设置输出文件类型
context.Response.ContentType = "image/jpg";
//将请求文件写入到输出缓存中
context.Response.WriteFile(context.Request.PhysicalPath);
//将输出缓存中的信息传送到客户端
context.Response.End();
{
//判断是否是本地网站引用图片,如果是则返回正确的图片
if (context.Request.UrlReferrer.Host == "localhost")
{
//设置客户端缓冲时间过期时间为0,即立即过期
context.Response.Expires = 0;
//清空服务器端为此会话开启的输出缓存
context.Response.Clear();
//设置输出文件类型
context.Response.ContentType = "image/jpg";
//将请求文件写入到输出缓存中
context.Response.WriteFile(context.Request.PhysicalPath);
//将输出缓存中的信息传送到客户端
context.Response.End();
}
//如果不是本地引用,则是盗链本站图片
else
{
//设置客户端缓冲时间过期时间为0,即立即过期
context.Response.Expires = 0;
//清空服务器端为此会话开启的输出缓存
context.Response.Clear();
//设置输出文件类型
context.Response.ContentType = "image/jpg";
//将请求文件写入到输出缓存中
context.Response.WriteFile(context.Request.PhysicalApplicationPath + "images/error.jpg");
//将输出缓存中的信息传送到客户端
context.Response.End();
//如果不是本地引用,则是盗链本站图片
else
{
//设置客户端缓冲时间过期时间为0,即立即过期
context.Response.Expires = 0;
//清空服务器端为此会话开启的输出缓存
context.Response.Clear();
//设置输出文件类型
context.Response.ContentType = "image/jpg";
//将请求文件写入到输出缓存中
context.Response.WriteFile(context.Request.PhysicalApplicationPath + "images/error.jpg");
//将输出缓存中的信息传送到客户端
context.Response.End();
}
}
//该属性表示HTTP请求是否可以使用当前处理
public bool IsReusable
{
get
{
return true;
}
}
}
//该属性表示HTTP请求是否可以使用当前处理
public bool IsReusable
{
get
{
return true;
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论