使Flask API更安全

时间:2016-02-19 23:05:14

标签: python flask tornado windows-firewall flask-httpauth

我正在使用Flask-HTTPAuth(https://github.com/miguelgrinberg/Flask-HTTPAuth)来保护我的API,使用用户名和密码。由于这是在端口8080上运行,我已经在我的VM上打开了端口并将其公开。我还能做些什么来使API更安全吗?

顺便说一句,我在Flask前面使用Tornado作为可扩展服务器。而且我是唯一一个使用API​​的人,因为拥有一个用户名 - 密码对对我来说是一个可行的选择。

感谢。

编辑 - 我可以在Windows防火墙上做些什么来使端口8080更安全吗?

1 个答案:

答案 0 :(得分:2)

以下是我看到的一些风险(无特定顺序)以及减轻这些风险的方法:

服务器配置错误

如果您的服务器存在可利用的安全漏洞或者配置错误,则可能允许某人访问该计算机,从而访问您的数据库。为了防止出现这种情况,最佳做法包括自动应用安全更新,拥有NDS等等(听起来,你可以通过在企业网后面获得相当多的保护)

密码监听

HTTP Basic auth以明文形式发送,因此理论上网络中的任何人都可以嗅探您的网络流量,窃取您的密码,然后连接到计算机本身。这里的最佳实践是使用HTTPS和其他一些协议进行身份验证。这里的需求取决于你是谁试图保护这些信息。

API漏洞

任何API都会为系统提供输入,这可能会导致漏洞。 SQL注入攻击在攻击数据库时很常见。确保永远不要执行原始SQL查询并采用其他最佳实践(边界检查等)

暴力攻击

如果没有密码,恶意用户可以继续尝试不同的组合,直到找到成功的密码。这里的解决方案包括使用强密码,实施限制和日志记录来检测暴力攻击。此处的其他攻击包括泄漏信息(例如当更多密码错误时返回更快,导致更快地猜测正确的密码)

TL; DR

对于您的用例(单个用户访问,在公司帐户后面),我认为http basic auth可能是一个合理的事情。您的决定应该归结为1)您对网络上的其他用户有多少信任2)您尝试保护的数据有多么有趣(信用卡或健康信息等等)。

如果您不信任您的企业网以保证您的数据安全,或者正在寻求更深入的防御,我会考虑使用https来防止嗅探密码,然后使用强密码。