当URL中有冒号时,Azure网站会抛出500错误

时间:2015-12-10 08:39:46

标签: azure azure-web-sites

外部客户端正在使用包含冒号(:)字符的网址访问我的Azure网站。该请求无效,但在我的旧IIS服务器上会出现404错误。在Azure上,相同的URL将产生500错误。这浪费了我的时间,因为我必须检查日志。这是一个请求的示例:

http://www.example.com/http:/www.example.com

有没有办法在服务器端避免这种行为,而是给出4xx错误?请记住,此问题仅在Azure上,我无法控制请求。

2 个答案:

答案 0 :(得分:1)

如果您正在运行.NET应用程序,那么这是由ASP.NET HTTP运行时引起的,更具体地说是由其请求筛选功能引起的。

如果URL路径包含任何不允许的字符(<,>,*,%,&,:,\\,?),则运行时将抛出异常,并且由于异常,IIS将返回错误代码500.

  

System.Web.HttpException:从客户端(:)发现了一个潜在危险的Request.Path值。

您可以在web.config文件中configure禁止使用字符。

<system.web>
    <httpRuntime targetFramework="4.5" requestPathInvalidCharacters="*,%" />
</system.web>

但我会小心,因为这种改变可能会带来一些安全隐患。

答案 1 :(得分:0)

在Azure中使用KUDU控制台将文件applicationhost.xdt添加到D:\ home \ site。

<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-   Transform">
 <system.applicationHost>
<sites>
  <site name="%XDT_SITENAME%" xdt:Locator="Match(name)">
           <virtualDirectoryDefaults xdt:Transform="Insert" allowSubDirConfig="false" />
           </site>
</sites>

这可以完成这项工作,但有一个不幸的副作用,因为任何应用程序子目录中的任何web.config都被忽略了。对于我们这方面,这具有不加载任何静态文件的效果,这意味着该站点无法正常工作。

这适用于在根级别具有单个web.config的任何站点。