在应用程序内部,我编写了代码,只有当请求来自内部IP地址时才响应请求,否则它只会显示一个页面,上面写着“你不能查看这个”。我们的内部地址都有一个独特的模式,所以我正在使用正则表达式检查请求IP。
但是,我对这种策略感到紧张。对于我来说,这似乎有点奇怪。这样做合理安全吗?
IP过滤总比没有好,但它有两个问题:
IP地址可以被欺骗。
如果内部机器受到攻击(包括客户端工作站,例如通过木马进行安装),那么攻击者可以将其用作跳板或代理来攻击您的系统。
如果这是非常敏感的数据,不一定需要专门的机器(虽然最好是这样),但您至少应该以某种方式对用户进行身份验证,并且不要在同一台机器上运行较不敏感(更容易遭受攻击)的应用程序。
如果确实很敏感,请请安排安全专业人员审核您所做的操作。
编辑:顺便提一下,如果可以,请放弃使用正则表达式,而是使用诸如tcpwrappers或操作系统内置的防火墙等功能。或者,如果您的应用程序可以有一个不同的IP地址,请使用防火墙阻止外部访问。(如果你没有防火墙,那么你可能就放弃了,可以把你的数据直接发给攻击者了 :-))
我更倾向于使用SSL和证书,或者简单的用户名/密码保护,而不是IP过滤。
这取决于您需要多么安全。
我假设您的服务器是外部托管的,而不是通过VPN连接的。因此,您正在检查HTTPS站点的请求地址是否在您自己组织的网络内。
使用正则表达式匹配IP地址可能有些靠不住,难道您不能像其他人一样使用网络/子网掩码吗?
它真的需要多安全?IP地址欺骗并不容易,欺骗的数据包无法用于建立HTTPS连接,除非它们还操纵上游路由器以使返回数据包被重定向到攻击者。
如果您需要真正安全,请让您的IT部门安装VPN并在私有IP地址空间上进行路由。为那些私有地址设置IP地址限制。即使有人破坏了上游默认网关,通过基于主机的VPN进行路由的IP地址限制仍然是安全的。
仅仅因为所有的内部IP都符合给定的正则表达式,并不意味着所有符合给定正则表达式的IP都是内部IP。因此,你的正则表达式可能存在安全风险。
我不知道你用什么技术来构建你的网站,但如果是Windows/ASP.net,你可以根据请求时的Windows凭据检查请求机器的权限。
像所有的安全措施一样,单独使用是无效的。如果您必须将其放在公开的 Web 服务器上,请使用 IP 白名单、基本的用户名/密码身份验证、SSL、良好的监控设置和最新的服务器应用程序。
话虽如此,将服务器设置为仅限内部 IP 地址,然后限制其对外访问的意义何在?这似乎基本上是重新发明了 NAT 免费提供的功能,而且对于仅限内部的服务器,还需要担心 Web 服务器漏洞等问题。
通过将服务器设置仅限内部访问,你没有任何收益,而且有很多好处。
对于资源问题,我的第一个想法是是否可以通过虚拟机来解决一些魔术般的事情?
除此之外 - 如果您所检查的IP地址要么是您知道属于应该访问该应用程序的计算机的IP,要么是本地IP范围内的IP,则我认为它是足够安全的(实际上,我目前正在一个项目中使用类似的方法,尽管保持网站“隐藏”并不是非常重要)。