我的网站是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;
}
});
答案 0 :(得分:4)
不,这不安全 - 您链接的other question中的评论完全正确。 (顺便说一句,你的问题实际上与此重复)。
对常规未加密HTTP的身份验证永远不会安全 - 用户和Web服务器之间的任何设备都可以以纯文本形式显示用户名和密码。作为第一步,您应该实施SSL / TLS来加密身份验证信息。
龙卷风真的需要坐在某种Web代理之后。您可以使用Apache或Nginx来完成此角色。有关于在this related question中设置Tornado + Nginx的说明。