2017-11-11 329 views
0

Gooday to All,我写下了一个非常敏感的Web应用程序,其功能就像文件浏览器,而不是使用sftp/ftp或ssh。它纯粹使用http/https。我使用request.remote_addr来确定客户端的IP地址。如果IP不在列表中,则拒绝。有没有关于python-flask的request.remote_addr的缺陷?或者它是可靠的(没有反向代理)

good_ips = ['127.0.0.1','192.168.1.10','192.168.1.1'] 
if request.remote_addr in good_ips: 
    pass 
else: 
    sys.exit() 

它工作正常,但我只想问,这是多么可靠和安全:)。

如果ip不在列表中,这将是结果。其他明智的网站将运行良好:D。

谢谢你,美好的一天! Result if ip is not in the list

回答

0

不,这不足以在您使用它时构建“敏感”服务。

查看https://en.wikipedia.org/wiki/IP_address_spoofing只是一个可能出错的开始。

您应该使用身份验证,例如使用公钥(SSH支持)或密码。 Kerberos也是一种可能性。

+0

哦。好的,谢谢你,先生。它不是主要的过滤器。只是一个避开陌生人的层;)但事情是,它不在私人IP上。我计划做的是把我的公共ip放在那里。作为另一层。 (在这些主题上发现了一些问题 https://security.stackexchange.com/questions/105675/ip-spoofing-how-secure-is-to-control-access-by-user-s-public-ip-address) 所以,简而言之,我不能依靠通过公共ip进行控制访问。但不管怎么说,只是为了另一层保护而添加它;) – screaminghard

0

源IP过滤是否适合您的措施取决于您的确切场景和威胁模型。 @JohnZwinck是正确的,因为它本身通常是不够的,但对于某些应用程序来说,它可以。

虽然在单独的IP数据包中伪造源IP很容易,但是http通过tcp,并且现代实现的tcp受到地址欺骗保护。尽管如此,较旧的TCP实现(在较早的操作系统中)仍然很脆弱。所以如果你的服务器有一个最新的操作系统,那么欺骗一个源IP并不是一件简单的事情。使用允许列表中的地址危害客户端可能更容易。

可能出错的另一件事与网络地址转换(NAT)有关。假设您将应用程序中的访问限制为内部IP地址(192.168.0.0/24)。一切正常,但是您的安全部门决定需要为所有Web应用程序设置反向代理。代理已部署,并且所有工作都正常。然而,现在你的应用程序接收到来自代理服务器的所有请求wuth一个内部地址,所以应用程序中的限制没有多大意义。客户端也可能发生类似事件,在某些情况下,客户端可能会在NAT后面,这意味着它们将具有相同的明显的客户端IP地址 - 这可能是好的或坏的。

最好的做法当然是要有正确的验证(通过密码,客户证书,还是多因素等等,但是你固定希望它是),与IP限制是额外的层提供更多安全。

+0

感谢您的信息和见解先生:)是的。我决定在运行时实施登录系统。 :)我也发现了一些关于代理的答案和解决方案(关于如何使用代理获得客户端的IP):)谢谢先生 – screaminghard

相关问题