gpt4 book ai didi

asp.net - 为什么所有 ASP.NET MVC 网站都允许并忽略任何 URL 前面的字符串 "/(F())/"?

转载 作者:行者123 更新时间:2023-12-02 11:31:21 25 4
gpt4 key购买 nike

我注意到,即使我在 URL 中添加 /(F())/ 前缀,对 ASP.NET Web 应用程序的请求也会成功,这是无稽之谈。平常的 Action 方法就是打。 Request.Url 显示 URL 前缀。因此,如果我请求 /(F())/x 操作会看到 Request.Url == "/x"

然后我尝试了其他 ASP.NET MVC 站点,例如 Stack Overflow:

https://stackoverflow.com/(F())/questions/43593952/why-do-all-asp-net-mvc-websites-allow-and-ignore-the-string-f-in-front-o

根据 Fiddler 的说法,请求是按预期发出的:

enter image description here

正如您所看到的,请求 URL 是正确的,并且服务器在没有重定向的情况下回复了完整内容。浏览器窗口也会显示该 URL。

此网址确实有效。因此我得出的结论是,框架中的某些东西导致该请求被重写并且前缀被删除。 Stack Overflow 应用程序似乎不知道该前缀。

在 Windows 7 上的 .NET 4.6.2 上的 Visual Studio 2017 中创建的新 MVC 应用程序中也会出现相同的结果。

另一个有趣的受害者:https://www.microsoft.com/(F(blah))/en-us/default.aspx (微软主页)。

字符串(F())并不特殊。请参阅其他有效字符串的注释,例如/(F(pV0)).

由于我的 ASP.NET 代码对原始 URL 不了解(Request.Url 不包含前缀),我似乎甚至无法检测到这种情况并使请求失败。

我还没有确认这是一个MVC问题。似乎很难在 ASP.NET+IIS 附带的众多功能中找到罪魁祸首。谁知道默认打开哪些功能?!我认为没有人真正知道:)

至少这是一个 SEO 问题,但我发现不知道发生了什么也很令人不安。这就是我正在调查的原因。 这是什么行为以及如何消除它?

最佳答案

这是由 ASP.NET cookieless feature set 引起的。 URL 现在可能如下所示:

http://example.com/MyWebApplication/(A(XXXX)S(XXXX)F(XXXX))/home.aspx

分解:

  • A(XXXX):这是匿名 ID。它用于识别访问您的应用程序的(匿名)用户。该字符串可能会也可能不会加密,具体取决于您在本节中的配置设置。
  • S(XXXX):这是 session ID(与 V1.1 相同)。
  • F(XXXX):这是表单例份验证票证。

由于 cookieless 模式已完全过时,会导致 SEO 问题和困惑,我建议立即禁用所有 ASP.NET 网站上所有可能的 cookieless 功能。

For each of the above features (Forms Authentication, Anonymous Identification, and Session State), you can control if and when the cookiesless feature will be used, and when the cookieless feature will be used instead. The configuration setting controlling this is: cookieless="UseCookies | UseUri | UseDeviceProfile | AutoDetect"

就我而言,我设置:

<anonymousIdentification enabled="false" />
<sessionState ... cookieless="UseCookies" />

您需要根据您的需求进行调整。

这有望解决这些 URL 的生成问题,但看起来它并不能阻止框架(默默地)接受这样的 URL。 The documentation claims that a header AspFilterSessionId will be present但我发现事实并非如此。

目前我还没有解决方案来阻止对这些不需要的网址的请求

关于asp.net - 为什么所有 ASP.NET MVC 网站都允许并忽略任何 URL 前面的字符串 "/(F())/"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43593952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com