问题描述
我想听听您关于从HttpRequest的主机属性中提取域名的任何安全漏洞的建议?
我已经使用ASP.NET Core开发了一个多租户的PWA,并从我用来在数据库中查找信息的主机(HttpRequest.host)中提取域名(即租户)名称。
例如,如果我有一个类似www.JoeBloggs.com的URL,提取的域将是‘JoeBloggs’。然后使用它检索我需要的有关该租户的信息。信息始终通过HTTPS连接发送。
如果我使用域名作为数据库查找的一部分,主机值是否可以伪造或可能用于SQL注入攻击?‘
谢谢,前进。
推荐答案
历史上有许多HTTP Host header attacks,其中目标Web服务器隐式信任Host
标头值,不进行/不正确的白名单检查或清理。简而言之,可以在某些上下文/配置中伪造此值。
Host
值旨在利用HTTP服务器下游某处的SQL注入漏洞,这样的值也不应能够触发任何意外的功能或数据暴露,因为通过预准备语句/参数化查询等机制传递给查询字符串的参数无法解释为SQL语句。相关地,如果您使用Host
标头的值来确定客户端是否应该从您的服务器的响应中接收任何类型的特权&信息-请不要。Host
标头值几乎不是正确身份验证/授权流的替身,考虑到它可以被相当简单地操纵,绝对不应该这样使用。您当然可以将它与其他更安全的身份验证/授权方法结合使用,但单独使用它是一个很大的安全禁忌。
本建议不排除在您的数据库、数据库驱动程序或堆栈中的任何其他位置存在单独的可利用的缺陷/错误,用于检查Host
头的内容。