无效的 URI:无法通过我们的自定义重写 IHttpModule 解析主机名

Posted

技术标签:

【中文标题】无效的 URI:无法通过我们的自定义重写 IHttpModule 解析主机名【英文标题】:Invalid URI: The hostname could not be parsed via our custom rewrite IHttpModule 【发布时间】:2020-01-11 06:12:59 【问题描述】:

这是我们网站上偶尔看到的一个奇怪错误。

这个错误的奇怪之处在于它被抛出在我们重写 IHttpModule 的 URL 中。有问题的行是:

var host = context.Request.Url.Host;

如果我在抛出此异常时记录context.Request.Url,则它是一个空字符串。

这种重写方法只能通过我们的global.asax文件调用:

void Context_AuthorizeRequest(object sender, EventArgs e)
     => URLRewriting.Process();

什么可能导致Request.Url.Host 为空?

附带说明,我们发现网站上发现了许多其他错误,这表明有人正在使用自动化工具扫描我们的网站以发现弱点和漏洞。我觉得这可能有某种关联,尽管我不确定为什么 Request.Url.Host 会一直为空。

其次,发出最后一个请求的用户 IP 是大学网络(对于我们的网站来说并不罕见)。

【问题讨论】:

【参考方案1】:

我会关注context.Request.Url 是空的这一事实。

您是否还有其他 IHttpModules 可以在管道早期使用 HttpContext

是否可能存在相对 HTTP 请求,如 here 所述?

当主机和 URL 为空时,您对请求有更多了解吗?

【讨论】:

我们在整个解决方案(重写器)中只有一个IHttpModule。我会尝试添加更多日志记录。【参考方案2】:

可能是您的重写模块无法映射的无效 URL? 根据this,如果rewrite map没有映射请求的规则,默认会得到一个空字符串。

如果您已经捕获了导致错误的原始请求,您可能能够复制它并逐步通过您的代码来验证这个理论。

【讨论】:

以上是关于无效的 URI:无法通过我们的自定义重写 IHttpModule 解析主机名的主要内容,如果未能解决你的问题,请参考以下文章

我可以编辑我的 .htaccess 来编写一些 WordPress URL(自定义重写)吗?

Joomla - 创建自定义重写规则

如何自己自定义重写TreeSet的排序方法

Firebase Auth - 自定义声明的用户列表

无法获得Android系统中googlemap V2上标记的自定义信息窗口的点击事件。

自定义通知声音在 Android Oreo 中不起作用