我的Flask REST API有多安全?

时间:2016-02-26 19:52:43

标签: python api flask tornado

我的网站是http协议。我的烧瓶API通过flask-httpauth(https://github.com/miguelgrinberg/Flask-HTTPAuth)保护。

我的Flask API前面有一个Tornado Web服务器,它监听私有端口5000.客户端API请求首先转到Tornado服务器,然后调用Flask API

这是我已经开始的流程:

我的网站(在http上)---> corpauthentication(在https上) - >回到我的网站(http) - >客户端调用Tornado服务器 - > Tornado调用Flask API并返回结果

我的API和网站有多安全?我正在阅读此链接Security of python flask REST API using HTTP Basic Authentication,在我看来,API是安全的,但我永远无法确定。

如果它不安全,您认为我还能做些什么来使其更安全?由于需要进行corpauthentication,我觉得在UI方面它非常安全。但是,让我们说有人在我的端口80上进行监听,即使有龙卷风+ httpbasic auth到位,他们是否能够跟踪任何API请求?

这是我的Tornado服务器代码:

from tornado.wsgi import WSGIContainer
from tornado.ioloop import IOLoop
from tornado.web import FallbackHandler, RequestHandler, Application
from flaskfile import app

class MainHandler(RequestHandler):
  def get(self):
    self.write("This message comes from Tornado ^_^")

tr = WSGIContainer(app)

application = Application([
(r"/tornado", MainHandler),
(r".*", FallbackHandler, dict(fallback=tr)),
])

if __name__ == "__main__":
  application.listen(5000)
  IOLoop.instance().start()

这就是我从Javascript调用API的方式:

$.ajax({
            url: 'http://x.x.x:5000/data',
            type: 'GET',
            dataType: 'json',
            async: false,

            headers: {
                "Authorization": "Basic " + btoa("username" + ":" + "password")
            },

            data: {start: startdate, end: enddate},
            success: function(result) {
                data = result.results;
            }
         });

1 个答案:

答案 0 :(得分:4)

不,这不安全 - 您链接的other question中的评论完全正确。 (顺便说一句,你的问题实际上与此重复)。

对常规未加密HTTP的身份验证永远不会安全 - 用户和Web服务器之间的任何设备都可以以纯文本形式显示用户名和密码。作为第一步,您应该实施SSL / TLS来加密身份验证信息。

龙卷风真的需要坐在某种Web代理之后。您可以使用Apache或Nginx来完成此角色。有关于在this related question中设置Tornado + Nginx的说明。