【发布时间】: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 发送登录凭据?如果是这样,不管是什么端口,都是不安全的。