IIS: 主机头回退是死代码 (r->hostname == NULL 永远不可能为真)

作者: A13501350创建于 2026年8月27日更新于 2026年9月15日
标签Platform - IIS2.x

摘要

iis/mymodule.cpp 中,当请求 URI 不包含主机时,Host 头的回退是死代码,因为 r->hostname == NULL 从来不会为真。r->hostname 是从 ConvertUTF16ToUTF8(req->CookedUrl.pHost, ...) (第 840 行) 获得的。该辅助函数 从来不返回 NULL:对于 NULL/空输入,转换的字节数为零,或者转换错误时,它返回字面串 "" (参见 mymodule.cpp:180-184:199-202:226-229);在成功时,它返回池分配的缓冲区。因此,在第 840 行之后,r->hostname 总是非 NULL (当 URI 没有主机时为空字符串)。

因此:

  • mymodule.cpp:843 if(r->hostname == NULL) 总是为假 → 回退到 req->Headers.KnownHeaders[HttpHeaderHost] 从来不运行。
  • mymodule.cpp:853 if(r->hostname != NULL) 总是为真。

内容来源: owasp-modsecurity/ModSecurity