我想听听你关于从HttpRequest的Host属性提取域名时存在任何安全漏洞的建议?
我使用ASP.NET Core开发了一个PWA,它是多租户的,我从主机(HttpRequest.host(中提取域(即租户(名称,用于在数据库中查找信息。
例如,如果我有一个类似www.JoeBlogs.com的URL,那么提取的域将是"JoeBlogs"。使用这个,我可以检索到我需要的那个租户的信息。
信息总是通过HTTPS连接发送的。
如果我在数据库查找中使用域名,主机值是否可以伪造或可能用于SQL注入攻击?
谢谢,Advance。
历史上曾发生过一系列HTTP主机标头攻击,其中目标Web服务器在没有/不适当的白名单检查或清理的情况下隐式信任Host
标头值。简而言之,在某些上下文/配置中可能会伪造此值。
对于SQL注入方面的问题,您应该已经在使用准备好的语句和参数化查询来降低此类风险;如果你还没有,你绝对应该努力重构你的SQL交互代码。即使恶意客户端发送的Host
值旨在利用HTTP服务器下游的SQL注入漏洞,这样的值不应该能够触发任何意外的功能或数据暴露,因为通过准备语句/参数化查询等机制传递给查询字符串的参数不能被解释为SQL语句。
与此相关的是,如果您使用Host
标头的值来确定客户端是否应该接收任何类型的";特权";服务器响应中的信息-不要。Host
头值几乎不是正确身份验证/授权流的替代,考虑到它可以被非常琐碎地操作,因此绝对不应该这样使用。您当然可以将它与其他更安全的身份验证/授权方法结合使用,但单独使用它本身是一个很大的安全问题。
此建议并不排除在您的数据库、数据库驱动程序或堆栈中检查Host
标头内容的任何其他地方存在单独的可利用缺陷/错误。