外部客户端正在使用包含冒号(:)字符的网址访问我的Azure网站。该请求无效,但在我的旧IIS服务器上会出现404错误。在Azure上,相同的URL将产生500错误。这浪费了我的时间,因为我必须检查日志。这是一个请求的示例:
http://www.example.com/http:/www.example.com
有没有办法在服务器端避免这种行为,而是给出4xx错误?请记住,此问题仅在Azure上,我无法控制请求。
答案 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的任何站点。