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:843if(r->hostname == NULL)总是为假 → 回退到req->Headers.KnownHeaders[HttpHeaderHost]从来不运行。mymodule.cpp:853if(r->hostname != NULL)总是为真。
内容来源: owasp-modsecurity/ModSecurity