我今天在网站上偶然发现了一些奇怪的行为。我们的搜索引擎优化顾问想要从Googles索引中获取一些奇怪的链接,这看似简单的任务。但事实证明这非常困难。
该网站是.net MVC 5.2.3应用程序。我们看了路由,我们自己的库等。没什么奇怪的。过了一会儿,我们放弃并尝试通过在web.config中设置规则将请求重定向到这些URL。原来这些URL:s是无与伦比的!在某种程度上,在适当的条件下,URL的关键部分似乎避免了匹配规则以及稍后在MVC应用程序中进行路由。
我们缩小了神秘的网址:s格式为(T(anything))
,其中T可以是任何大写字母,任何东西都可以是任何东西。它位于URL的开头,就像它是一个目录一样。正则表达式:\([A-Z]\([a-zA-Z0-9]*\)\)
我已经测试过并发现了相同的行为:
stackoverflow.com的一些例子:
绕过路线:https://stackoverflow.com/(G(hello))/users/1049710/jonas-%C3%84ppelgran
它似乎不会影响整个网络,因此它不应该是浏览器或HTTP问题。一些例子:
有人可以解释发生了什么吗?
我可以做些什么来禁止这些URL:s绕过路由?
答案 0 :(得分:2)
显然,这是ASP.NET中称为“无cookie会话”的功能。请参阅MSDN文档中的“无Cookie会话ID”部分here。
基本思想是,不是在cookie中存储会话ID(如果启用了会话状态),而是将其嵌入到URL中。
我们(Stack Overflow)完全禁用会话状态(通过将sessionState
模式设置为off
)。据我所知,最终结果是,只要使用与会话ID格式匹配的其中一个URL,就会丢弃该信息。
Google中通向我们的链接都没有包含它,这让我觉得您的网站可能配置为在网址中实际生成会话ID?如果没有禁用该功能,您可能无法在此处执行任何操作。虽然,请参阅我在上面链接的MSDN页面上的“重新生成过期的会话标识符”,以了解如何至少防止意外的会话共享(如果尚未完成)。