【问题标题】:Making Flask API more secure [closed]使 Flask API 更安全 [关闭]
【发布时间】:2016-06-01 16:45:42
【问题描述】:

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

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

谢谢。

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

【问题讨论】:

  • 有很多不同的途径,从日志记录、节流、使用加密(基本身份验证无法获得)等。您对这个服务器的用例是什么?您想避免的最糟糕的事情是什么?
  • @AnilRedshift 我只是不希望任何人访问数据库。我的网站隐藏在公司身份验证之后,因此肯定是安全的。我只是担心我的 API 是开放的。虽然您需要有用户名和密码才能调用/卷曲它,但我只是想确保我的数据不会因为被 API 暴露而受到攻击。
  • @90abyss api 消费者物理部署在哪里?是在同一台机器上吗?

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


【解决方案1】:

以下是我看到的一些风险(排名不分先后)以及缓解风险的方法:

服务器配置错误

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

密码窥探

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

API 漏洞

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

蛮力攻击

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

TL;DR

对于您的用例(单用户访问,在公司帐户后面),我认为 http 基本身份验证可能是一个合理的做法。您的决定应归结为 1) 您对网络上其他用户的信任程度 2) 您尝试保护的数据有多有趣(例如信用卡或健康信息等)

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

【讨论】:

  • 这对 AnilRedshift 很有帮助!我的公司网络非常安全。我唯一担心的是有人直接访问 API。如果黑客试图访问我的网站,那么他肯定无法进入。但据说他以某种方式试图直接访问我的 API(使用 curl 等),虽然他会被提示输入用户名和密码,但我只是想确保他没有办法通过破解密码进入通过一些 hacky 手段。
  • 我不想冒犯/虐待,但像“肯定无法进入”这样的说法只会让人一笑置之。此外,如果可以在公共 API 中公开(然后希望使其安全!),我不会称之为网络安全。最好联系安全人员,她/他应该指导您按照公司政策正确完成或禁止。
猜你喜欢
  • 2018-02-11
  • 1970-01-01
  • 2011-08-26
  • 1970-01-01
  • 1970-01-01
  • 2017-04-26
  • 2016-06-10
  • 2011-12-28
  • 2014-09-05
相关资源
最近更新 更多