我使用Flask创建了API服务器,用户通过个人API密钥提供(通过常规Web界面)。然后发送到我的服务器的所有请求都必须提供此密钥(在标头中或作为get / post参数,这无关紧要)。目前,服务器通过HTTP(而不是HTTPS)运行。
但我想知道它是否安全?如果有人使用wireshark或任何其他流量嗅探器获取此地址,那么他可以作为原始所有者向我的API发送请求。
我查看了几个提供apikey使用API的资源,发现其中很多都使用HTTP模式。如果我只转向HTTPS并强制客户端使用HTTPS,那么它是否足以保护我的应用程序免受恶意攻击者的攻击?
答案 0 :(得分:2)
HTTPS足以保证网络上的数据流。
如果您仍想支持HTTP,则可以在API中实现限制和令牌过期。
通过限制,您可以限制API用户在特定时间范围内发送的请求数。
通过Token-Expiry,用户的API密钥会在一段时间后过期,并且无法再使用它。这意味着您必须在代码中实现令牌刷新。
查看此PyCon 2014 presentation以获得更好的API实施。 查找Presentation source on GitHub