2

任何人都知道如何防止这个 IIS7.5 /aux 路径问题(在 IIS8 上工作)。这不是真正的 404 错误!?!前http://msdn.microsoft.com/aux

4

2 回答 2

3

这是由于 IIS 中对 URL 的一些内置限制,这些限制不允许您使用在 Windows 文件系统中具有特殊含义的名称,这可以追溯到 CP/M 时代: https://www .bitquabit.com/post/zombie-operating-systems-and-aspnet-mvc/

如果您使用的是 ASP.NET 版本 4 或更高版本,则可以使用此设置web.config来禁用这些 URL 限制:

<configuration>
  <system.web>
    <httpRuntime relaxedUrlToFileSystemMapping="true"/>

    <!-- ... your other settings ... -->
  </system.web>
</configuration>

如果您确定在任何地方(在 Web 服务器、框架或您自己的代码以及任何第三方依赖项中)执行的部分 URL 和文件系统路径之间没有直接映射,这应该是安全的。在现代 Web 应用程序中通常应该是这种情况,但不要相信我(或任何人)的话,除非他们有可靠的证据,我无法在此提供。

另请参阅:http ://haacked.com/archive/2010/04/29/allowing-reserved-filenames-in-URLs.aspx

于 2013-02-08T11:40:33.370 回答
0

如果您正在处理这样的问题,这可能意味着您的应用程序在 URL 路径中使用了可能最初是用户输入的任意文本。这是在所谓的“REST”API 中使用的一种被误导的设计模式,目的是使 URL 变得“漂亮”。您可能还会遇到百分比编码、Unicode 字符、trans-BNP Unicode 字符(表情符号!)、Unicode 规范化、不区分大小写(以及土耳其语-i 和希腊语问题)以及无数尚未解决的问题被发现。

REST 不是关于漂亮的 URL,漂亮的 URL 不需要包含任意文本(除非你是 Wikipedia,否则你将很难做到正确)。提高您的谷歌排名的漂亮网址充其量是有争议的,如果不是神话的话。

以下是重新设计应用程序中 URL 的一些建议:

  1. 使用唯一 ID 而不是名称。人类可读的名称永远不应用作标识符。
  2. 如果您认为您必须用文本(除了唯一 ID)来装饰您的 URL,那么“清理”文本部分。例如,您可以删除 URL、空格等中的任何非 ASCII 字符和任何具有特殊含义的字符,并用破折号替换不允许的字符序列。当然,还要替换“禁止”的名称,例如aux. 但是,说真的,不要为这样的“美化”网址而烦恼。
  3. 如果它对您的应用程序有意义,让用户指定 URL 片段,但使用验证来限制允许的 URL。然后,您可以强制片段是唯一的,并将其用作唯一 ID,而不仅仅是装饰。
  4. 如果aux是 URL 的固定部分,只需将其替换为其他内容即可。
  5. 对任意用户输入使用查询字符串或 POST 请求。当然,还要对其进行验证和清理。URL 路径中不应包含搜索字符串之类的内容。
  6. 如果您不同意,或者您在这件事上别无选择,或者没有时间重新设计您的 API,请参阅https://stackoverflow.com/a/14771755/2279059
于 2019-08-09T08:58:51.387 回答