Asp.Net Core 通过自定义中间件防止图片盗链的实例(转)
2018-05-15 12:13
776 查看
一、原理
要实现防盗链,我们就必须先理解盗链的实现原理,提到防盗链的实现原理就不得不从HTTP协议说起,在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件。换句话说,通过referer,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。有了referer跟踪来源就好办了,这时就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返回指定的页面。如果想对自己的网站进行防盗链保护,则需要针对不同的情况进行区别对待。
如果网站服务器用的是apache,那么使用apache自带的Url Rewrite功能可以很轻松地防止各种盗链,其原理也是检查refer,如果refer的信息来自其他网站则重定向到指定图片或网页上。
如果服务器使用的是IIS的话,则需要通过第三方插件来实现防盗链功能了,现在比较常用的一款产品叫做ISAPI_Rewrite,可以实现类似于apache的防盗链功能。另外对于论坛来说还可以使用“登录验证”的方法进行防盗链。
二、实现防盗链
现在让我们在ASP.NET Core中实现防盗链技术来保护我们的应用程序和站点文件。这就要通过ASP.NET Core中的中间件技术,监听并处理所有传入的请求,检查这些请求是不是来自我们的应用程序。
让我们来创建这个防盗链的中间件程序:
public class OuterImgMiddleware { private readonly string _wwwrootFolder; private readonly RequestDelegate _next; public OuterImgMiddleware(RequestDelegate next, IHostingEnvironment env) { _wwwrootFolder = env.WebRootPath; _next = next; } public async Task Invoke(HttpContext context) { var applicationUrl = $"{context.Request.Scheme}://{context.Request.Host.Value}"; var headersDictionary = context.Request.Headers; var urlReferrer = headersDictionary["HeaderNamesReferer"].ToString(); if (!string.IsNullOrEmpty(urlReferrer) && !urlReferrerStartsWith(applicationUrl)) { var unauthorizedImagePath = Path.Combine(_wwwrootFolder, "Images/Unauthorizedpng"); await context.Response.SendFileAsync(unauthorizedImagePath); } await _next(context); } }
在这个中间件中我们可以看到ASP.NET Core中的Request对象并没有对Referrer进行封装,想获取Referrer,就要通过HTTP头信息(Headers)进行访问。
一般都要有一个IApplicationBuilder扩展:
最后,使用它只需要在Configure函数中调用,上面的扩展函数。
更多:
相关文章推荐
- Asp.Net Core 通过中间件防止图片盗链的实例
- Asp.Net Core 通过中间件防止图片盗链
- Asp.Net Core 通过中间件防止图片盗链
- Asp.net MVC防止图片盗链的实现方法,通过自定义RouteHandler来操作
- Asp.net MVC防止图片盗链的实现方法,通过自定义RouteHandler来操作
- Asp.net MVC 利用自定义RouteHandler来防止图片盗链
- 转:【译】Asp.net MVC 利用自定义RouteHandler来防止图片盗链
- 【译】Asp.net MVC 利用自定义RouteHandler来防止图片盗链
- 【译】Asp.net MVC 利用自定义RouteHandler来防止图片盗链 (转)
- (转)(转)【译】Asp.net MVC 利用自定义RouteHandler来防止图片盗链
- 学习ASP.NET Core,你必须知道“中间件”是什么?中间件如何注册?请求处理管道是如何通过中间件构建的?
- ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简介
- Asp.Net图片防止盗链
- asp.Net下图片防止盗链的原理
- ASP.NET Core 1.1 静态文件、路由、自定义中间件、身份验证简介
- ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简介
- ASP.NET Core 1.0 静态文件、路由、自定义中间件、身份验证简介
- [Asp.net core]自定义中间件
- Asp.Net Core Web Api图片上传(一)集成MongoDB存储实例教程
- 防止图片盗链——ASP.NET 技术