农产品网站开发方案,婚纱摄影行业网站,个人网站备案名字不同,新乡公司做网站一、原理 要实现防盗链#xff0c;我们就必须先理解盗链的实现原理#xff0c;提到防盗链的实现原理就不得不从HTTP协议说起#xff0c;在HTTP协议中#xff0c;有一个表头字段叫referer#xff0c;采用URL的格式来表示从哪儿链接到当前的网页或文件。换句话说#xff0c… 一、原理 要实现防盗链我们就必须先理解盗链的实现原理提到防盗链的实现原理就不得不从HTTP协议说起在HTTP协议中有一个表头字段叫referer采用URL的格式来表示从哪儿链接到当前的网页或文件。换句话说通过referer网站可以检测目标网页访问的来源网页如果是资源文件则可以跟踪到显示它的网页地址。有了referer跟踪来源就好办了这时就可以通过技术手段来进行处理一旦检测到来源不是本站即进行阻止或者返回指定的页面。如果想对自己的网站进行防盗链保护则需要针对不同的情况进行区别对待。 如果网站服务器用的是apache那么使用apache自带的Url Rewrite功能可以很轻松地防止各种盗链其原理也是检查refer如果refer的信息来自其他网站则重定向到指定图片或网页上。 如果服务器使用的是IIS的话则需要通过第三方插件来实现防盗链功能了现在比较常用的一款产品叫做ISAPI_Rewrite可以实现类似于apache的防盗链功能。另外对于论坛来说还可以使用“登录验证”的方法进行防盗链。 二、实现防盗链 现在让我们在ASP.NET Core中实现防盗链技术来保护我们的应用程序和站点文件。这就要通过ASP.NET Core中的中间件技术监听并处理所有传入的请求检查这些请求是不是来自我们的应用程序。 让我们来创建这个防盗链的中间件程序 public class HotlinkingPreventionMiddleware{ private readonly string _wwwrootFolder; private readonly RequestDelegate _next; public HotlinkingPreventionMiddleware(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[HeaderNames.Referer].ToString(); if(!string.IsNullOrEmpty(urlReferrer) !urlReferrer.StartsWith(applicationUrl)) { var unauthorizedImagePath Path.Combine(_wwwrootFolder,Images/Unauthorized.png); await context.Response.SendFileAsync(unauthorizedImagePath); } await _next(context); }} 在这个中间件中我们可以看到ASP.NET Core中的Request对象并没有对Referrer进行封装想获取Referrer就要通过HTTP头信息Headers进行访问。 一般都要有一个IApplicationBuilder扩展 public static class BuilderExtensions{ public static IApplicationBuilder UseHotlinkingPreventionMiddleware(this IApplicationBuilder app) { return app.UseMiddleware(); }} 最后使用它只需要在Configure函数中调用上面的扩展函数。 app.UseHotlinkingPreventionMiddleware(); 三、真能防 如何突破防盗链针对检查refer的方式可以在页面中间件里面先进入目的地址的另外一个页面在转到目的页面即可这样页面的refer就是目的站点自己的如此即做到突破。这方面可以使用的工具很多尤其是成熟的web项目测试包如HtmlUnit直接在请求中设置refer都是可以的。 如果盗用网站是 https 的 protocol而图片链接是 http 的话则从 https 向 http 发起的请求会因为安全性的规定而不带 referer从而实现防盗链的绕过。 最后我只能说这种方式只能在一定程度上进行防御不可能杜绝所有的攻击还是建议使用成熟服务器应用的方案比如Nginx。 原文地址http://www.cnblogs.com/maxzhang1985/p/6124936.html .NET社区新闻深度好文微信中搜索dotNET跨平台或扫描二维码关注