【问题标题】:How safe is my Flask REST API?我的 Flask REST API 有多安全?
【发布时间】:2016-06-10 04:29:28
【问题描述】:

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

我的 Flask API 前面有一个 Tornado 网络服务器,它侦听私有端口 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 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;
            }
         });

【问题讨论】:

  • 我听说将龙卷风本身暴露在网络上并不是一个好主意。我会把它放在像 nginx 这样的网络服务器后面,它可以异步地将有效请求传递给龙卷风,并丢弃/阻止任何其他请求以及托管静态文件。您还可以将 https 添加到您的龙卷风实例。
  • 您是否通过纯 HTTP 发送登录凭据?如果是这样,不管是什么端口,都是不安全的。

标签: python api flask tornado


【解决方案1】:

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

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

Tornado 确实需要使用某种网络代理。您可以使用 Apache 或 Nginx 来完成此角色。在this related question 中有设置 Tornado+Nginx 的说明。

【讨论】:

    猜你喜欢
    • 2019-04-24
    • 1970-01-01
    • 2012-03-06
    • 2020-09-18
    • 2016-01-24
    • 2014-04-27
    • 2015-09-08
    • 2020-10-18
    • 2014-04-23
    相关资源
    最近更新 更多