Asp.Net Core 通过中间件防止图片盗链
来源:互联网 发布:淘宝客服岗位业绩贡献 编辑:程序博客网 时间:2024/06/08 02:40
一、原理
要实现防盗链,我们就必须先理解盗链的实现原理,提到防盗链的实现原理就不得不从HTTP协议说起,在HTTP协议中,有一个表头字段叫referer,采用URL的格式来表示从哪儿链接到当前的网页或文件。换句话说,通过referer,网站可以检测目标网页访问的来源网页,如果是资源文件,则可以跟踪到显示它的网页地址。有了referer跟踪来源就好办了,这时就可以通过技术手段来进行处理,一旦检测到来源不是本站即进行阻止或者返回指定的页面。如果想对自己的网站进行防盗链保护,则需要针对不同的情况进行区别对待。
如果网站服务器用的是apache,那么使用apache自带的Url Rewrite功能可以很轻松地防止各种盗链,其原理也是检查refer,如果refer的信息来自其他网站则重定向到指定图片或网页上。
如果服务器使用的是IIS的话,则需要通过第三方插件来实现防盗链功能了,现在比较常用的一款产品叫做ISAPI_Rewrite,可以实现类似于apache的防盗链功能。另外对于论坛来说还可以使用“登录验证”的方法进行防盗链。
二、实现防盗链
现在让我们在ASP.NET Core中实现防盗链技术来保护我们的应用程序和站点文件。这就要通过ASP.NET Core中的中间件技术,监听并处理所有传入的请求,检查这些请求是不是来自我们的应用程序。
让我们来创建这个防盗链的中间件程序:
在这个中间件中我们可以看到ASP.NET Core中的Request对象并没有对Referrer
进行封装,想获取Referrer,就要通过HTTP头信息(Headers)进行访问。
一般都要有一个IApplicationBuilder扩展:
最后,使用它只需要在Configure函数中调用,上面的扩展函数。
三、真能防?
如何突破防盗链?针对检查refer的方式,可以在页面中间件里面先进入目的地址的另外一个页面在转到目的页面即可,这样页面的refer就是目的站点自己的,如此,即做到突破。这方面可以使用的工具很多,尤其是成熟的web项目测试包,如HtmlUnit,直接在请求中设置refer都是可以的。
如果盗用网站是 https 的 protocol,而图片链接是 http 的话,则从 https 向 http 发起的请求会因为安全性的规定,而不带 referer,从而实现防盗链的绕过。
最后,我只能说这种方式,只能在一定程度上进行防御,不可能杜绝所有的攻击,还是建议使用成熟服务器应用的方案,比如Nginx。
原文地址:http://www.cnblogs.com/maxzhang1985/p/6124936.html
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
- Asp.Net Core 通过中间件防止图片盗链
- ASP.NET Core 中间件
- Asp.net防止图片盗链
- Asp.net MVC防止图片盗链的实现方法,通过自定义RouteHandler来操作
- ASP.NET CORE基础教程(二)-中间件
- ASP.NET Core 中间件之压缩、缓存
- ASP.NET Core 中间件Diagnostics使用
- ASP.NET Core 开发-中间件(Middleware)
- [译]ASP.NET Core 2.0 中间件
- 学习ASP.NET Core,你必须知道“中间件”是什么?中间件如何注册?请求处理管道是如何通过中间件构建的?
- Asp.net防止盗链
- .NET Core 中间件MiddleWare
- .net Core中间件实战
- 在ASP.NET Core Identity外面使用Cookie中间件
- 如何一秒钟从头构建一个 ASP.NET Core 中间件
- ASP.NET Core中间件(Middleware)实现WCF SOAP服务端解析
- asp.net core 中间件详解及项目实战
- asp.net core 中间件详解及项目实战
- Docker 部署dotnetcore
- ASP.NET Core服务器综述
- ASP.NET Core的Kestrel服务器
- ASP.NET Core WebListener 服务器
- 一款全新的基于IntelliJ和ReSharper的跨平台.NET IDE
- Asp.Net Core 通过中间件防止图片盗链
- 微软的FreeBSD社区推广活动 北京站,你没看错!微软现在是一家名副其实的开源公司
- C程序编译执行过程
- 两年来的core折腾之路几点总结,附上nginx启用http2拿来即用的配置
- .NET Standard 2.0:整齐划一的目标
- 因缺少jedis.jar包报"java.lang.NoSuchMethodError: redis.clients.jedis.JedisPool..."问题
- 在ASP.NET Core中实现一个Token base的身份认证
- 八幅漫画理解使用JSON Web Token设计单点登录系统
- 如何用TypeScript开发微信小程序