我的 Flask REST API 有多安全?

90a*_*yss 1 python api tornado flask

我的网站是 http 协议。我的flask 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 是安全的,但我永远无法确定。

如果它不安全,你认为我还能做些什么来使它更安全?由于需要进行公司验证才能进入,我觉得在 UI 方面它非常安全。但是假设有人正在监听我的 80 端口,即使存在 tornado + httpbasic 身份验证,他们是否能够跟踪任何 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()
Run Code Online (Sandbox Code Playgroud)

这就是我从我的 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;
            }
         });
Run Code Online (Sandbox Code Playgroud)

Nei*_*l P 5

不,这不安全 -您链接到的另一个问题中的评论是完全正确的。(顺便说一句,您的问题实际上是重复的)。

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

Tornado 确实需要坐在某种网络代理后面。您可以使用 Apache 或 Nginx 来完成此角色。在这个相关问题中有设置 Tornado+Nginx 的说明。