我使用Flask-HTTPAuth (https://github.com/miguelgrinberg/Flask-HTTPAuth)通过用户名和密码来保护我的应用程序接口。因为它是在端口8080上运行的,所以我在我的VM上打开了这个端口并将其公开。我还能做些什么来使API更安全?
顺便说一句,我在Flask前面使用Tornado作为一个可伸缩的服务器。我是唯一一个使用API的人,因为对我来说,拥有一个用户名-密码对是一个可行的选择。
谢谢。
编辑-我可以在Windows防火墙上做些什么来提高端口8080的安全性吗?
发布于 2016-02-20 07:25:05
以下是我看到的一些风险(没有特定的顺序)以及缓解它们的方法:
服务器配置错误
如果您的服务器存在可利用的安全错误或配置错误,则可能允许他人访问该计算机,从而访问您的数据库。为了防止这种情况,最佳实践包括自动应用安全更新,安装NDS等(听起来像是你在corpnet后面得到了相当多的保护)
密码侦听
HTTP Basic身份验证是明文发送的,因此理论上您网络中的任何人都可以嗅探您的网络流量,窃取您的密码,然后连接到机器本身。这里的最佳实践是使用HTTPS和一些其他协议进行身份验证。这里的需求归结为您试图保护这些信息不受影响的人。
API漏洞
任何API都会向系统提供输入,这可能会导致漏洞。SQL注入攻击是一种常见的数据库攻击方式。确保从不执行原始SQL查询,并采取其他最佳实践(边界检查等)
暴力攻击
如果没有密码,恶意用户只需不断尝试不同的组合,直到找到一个成功工作的组合。这里的解决方案包括使用强密码,实现节流和日志记录来检测暴力破解攻击。这里的其他攻击包括泄漏信息(例如,当更多的密码错误时,返回速度更快,导致更快地猜测正确的密码)
TL;DR
对于您的用例(单个用户访问,在企业帐户后面),我认为http basic auth可能是一个合理的选择。你的决定应该归结为: 1)你在多大程度上信任网络上的其他用户2)你试图保护的数据(比如信用卡或健康信息等)有多有趣。
如果您不信任您的公司网来保护您的数据安全,或者正在寻找更深入的防御,我会考虑使用https来防止嗅探密码,然后使用强密码。
https://stackoverflow.com/questions/35516693
复制相似问题