我的网站是基于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,在我看来它是安全的,但我永远不能确定。
如果它不安全,你认为我还能做些什么来使它更安全?由于需要进行身份验证才能进入,我觉得在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()这就是我从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;
}
});发布于 2016-02-27 05:56:39
不,这不安全-您链接到的other question中的注释是完全正确的。(顺便说一句,你的问题实际上是那个问题的副本)。
基于常规未加密HTTP的身份验证永远不会安全-用户和text服务器之间的任何设备都将以纯文本形式看到用户名和密码。作为第一步,您应该实现SSL/TLS来加密身份验证信息。
Tornado真的需要坐在某种web代理后面。您可以使用Apache或Nginx来完成此角色。下面是在this related question中设置Tornado+Nginx的说明。
https://stackoverflow.com/questions/35660502
复制相似问题