继404页面劫持之后 小米路由器被曝劫持网页推广自家应用

作者: 少校seo 分类: 黑帽seo资讯 发布时间: 2019-09-13 07:01

6月26日,V2EX论坛网友“Athrob”透露,在劫持404、403等错误页面后,小米路由器(在开发版本中)的代码中增加了一行JS,开始在一些用户访问页面中推广小米应用。在访问豆瓣电影时,网民发现小米手机应用的广告信息出现在网页上。这件事引起了业内许多人和用户的不满。一些网民表示,404页和403页的变化以及JS注入已经超出了用户对“路由器”的定义。它是一个数据传输站,但不处理和编辑用户数据。

访问:

小米旗舰店

小米论坛披露

V2EX论坛网友“Athrob”透露

他们最担心的是小米通过虚假劫持和JS注入“商业化”。然而,通过收集用户信息“推广软件”的行为侵犯了用户的隐私权。

百度以360万相关搜索结果进入“小米路线劫持”。一些网民在MIUI论坛上抱怨道,“这一跳让我痛不欲生。这原本是浏览器的工作。结果,我不分青红皂白地跳到黑帽seo。我可以去网站刷新一下。一旦网页变成网站推广路由器,并且地址被更改,我就无法刷新网页。甚至我的个人网站也被屏蔽了。”

一些小米用户抱怨说,“他们只有在看中小米路由器的颜值时才会购买它”,并且“小米没有道德操守,也没有后悔药”用户还暴露了小米路由器的一些配置文件和可疑举报人描述的标题广告,如下图所示:

早在5月份,小米路由器的一些网民就报告称,HTTP403和404被劫持。一些技术专家分析了小米路由器页面劫持广告的原理,发现有一个具体的劫持列表。如果用户访问的网站存在于该列表中,页面将被劫持,广告代码将被插入。代码存储在api.miwifi.com,整个过程是用明文编写的,没有任何加密。

一些业内人士表示,因为“智能路由器”是用户的入口,所以可能存在更多的隐患。然而,“小米路由器”能够准确控制和收集用户传输的数据,并对大数据进行处理和分析,这在未来可能会对用户隐私产生不可预测的影响。一旦私人信息被黑客使用,将会给用户造成无法估量的损失。

活动入口:

阿里云庆祝成立10周年:9月10日会员节推广活动今天启动

走进威瑞信-互联网根服务器经理/的监护人。com

ASP.NET Core 中的SEO优化(3):自定义路由匹配和生成

前两篇文章主要总结了内容管理系统的两个技术要点在ASP.NET核心网的应用:

但本文黑帽seo,继续介绍另一个技术点:自定义路由匹配和生成。

在MVC5时代,默认路由可能是简单的约定/{控制器}/{动作}/{id},第一部分对应于控制器名称,第二部分对应于动作名称,第三部分是参数名称。

在网络应用编程接口(WebApi)和ASP.NET核心(CORE)时代,借助路由功能来指定相应操作的路由方向,RESTful Api可以灵活配置。

然而,在以搜索引擎优化为重点的内容管理系统中,路由灵活性有更严格的要求。例如:

使用默认路由约定很难实现这些友好的url链接。当然,路由规则可以配置为传递参数:

app.UseMvc(routes => { routes.MapRoute( name: "article_list", template: "{parentCategory}/{category}-{page}/", defaults: new { controller = "Article", action = "Index" }); routes.MapRoute( name: "article_detail", template: "{category}/{article}.html", defaults: new { controller = "Article", action = "Detail" }); routes.MapRoute( name: "tags", template: "{tag}/", defaults: new { controller = "Article", action = "Tag" }); });

然而,这种配置非常复杂且不灵活。如果引入更多的规则,比如不向下匹配,将会非常困难。有更灵活的计划吗?当然,这是本文接下来要介绍的IRouter接口。

上一节末尾介绍的通用路由配置方法实际上是映射路由(MapRoute)方法,它逐个创建IRouteBuilder实例,并将它们添加到iRouteBuilder实例中。具体方法可以是。

因此,我们可以实现一个定制的IRouter,它可以在没有默认协议的情况下满足我们的苛刻要求。

首先,让我们看看IRouter的定义。源代码在ASPANET/ROUTING/SRC/微软。CORE.ROUTING.Abstracts/iRouter.cs.

namespace Microsoft.AspNetCore.Routing { public interface IRouter { Task RouteAsync(RouteContext context); VirtualPathData GetVirtualPath(VirtualPathContext context); } }

IRouter接口只有两种方法。本文给出了代码示例来分别介绍它们。

该方法实现了路由匹配,从路由上下文中获取所需数据,存储在RouteData字典中,然后从控制器中取出进行相应的处理。

public async Task RouteAsync(RouteContext context) { var requestedUrl = context.HttpContext.Request.Path.Value.TrimStart('/').ToLower(); var split = requestedUrl.Split('/'); if (secoend != null && secoend.EndsWith(".html") && split.Length == 2) { var title = secoend.Replace(".html", ""); context.RouteData.Values["controller"] = "Article"; context.RouteData.Values["action"] = "Detail"; context.RouteData.Values["category"] = first; context.RouteData.Values["title"] = title; } //...对请求路径进行一系列的判断 //最后注入`MvcRouteHandler`示例执行`RouteAsync`方法,表示匹配成功 await context.HttpContext.RequestServices.GetService<MvcRouteHandler>().RouteAsync(context); } #p#分页标题#e#

这样,当请求被路由到/news/asp.net.html时,上述规则将被匹配,进入文章控制器的请求的详细操作将被处理,并且请求可以从RouteData发送。价值观[“范畴”]?。to String();方法获取所需数据。

该方法实现了路由生成。路由数据字典(RouteData dictionary)中的数据可以从路由上下文中获得,以生成虚拟路径(区别和真实目录)。

public VirtualPathData GetVirtualPath(VirtualPathContext context) { var path = string.Empty; var hasController = context.Values.TryGetValue("controller", out var controller); var hasAction = context.Values.TryGetValue("action", out var action); var hasCategory = context.Values.TryGetValue("category", out var category); var hasTitle = context.Values.TryGetValue("title", out var title); if (hasController && hasAction && hasCategory && hasTitle) { path = $"/{category/{title}.html"; } return path != string.Empty ? new VirtualPathData(this, path) : null; }

这样,当调用路径生成方法@ URL.action(“详细信息”、“文章”、“新的{title = "ASP.net”、“类别= "新闻" })时,将生成诸如“/news/asp.net.html”之类的路径。

如何将用户实现的IRouter设置为原始的MVC项目?该方法非常简单,上面已经简要提到过。实际上,应用程序。UseMvc有添加IRouter的方法:

app.UseMvc(routes => { //添加 自定义路由匹配与url生成组件 routes.Routes.Add(new RouteProvider()); });

RouteProvider是IRouter的实现,所以自定义路由提供程序将会生效!

搜索引擎优化中会有一个铁律,也就是说,如果链接无效,只能返回404个。例如,手动输入路径asp优化seo可以匹配文章细节的动作。如果在数据库中找不到该文章,它就不应该匹配。但是,如果在匹配时查询数据库来确认它是否存在,会增加系统的压力,所以,可以放在操作(动作)查询中,找不到它,然后返回NotFound,让最后一篇文章“ASP.NET核心搜索引擎优化(SEO optimization in CORE)(2):在中间件中渲染Razor视图”中间件同时引入中间件处理输出404页。

如果将域名绝对路径用于站点内链接,可以提高优化效果。我们可以自己编写一个UrlHelper扩展方法:

public static class UrlHelperExtensions { public static string AbsoluteAction( this IUrlHelper helper, string actionName, string controllerName, object routeValues = null) { string scheme = helper.ActionContext.HttpContext.Request.Scheme; return helper.Action(actionName, controllerName, routeValues, scheme); } public static string AbsoluteContent( this IUrlHelper helper, string contentPath) { return new Uri(helper.ActionContext.HttpContext.Request.GetUri(), helper.Content(contentPath)).ToString(); } public static string AbsoluteRouteUrl( this IUrlHelper helper, string routeName, object routeValues = null) { string scheme = helper.ActionContext.HttpContext.Request.Scheme; return helper.RouteUrl(routeName, routeValues, scheme); } }

本文主要介绍了自定义路由匹配和生成的解决方案,将路由相关的处理集中到一个类中,以避免分散在不同的视图中进行维护。下一篇文章将介绍自定义视图搜索目录和主题切换。