2016-02-26 138 views
1

我的网站是http协议。我的烧瓶API通过flask-httpauth(https://github.com/miguelgrinberg/Flask-HTTPAuth)保护。我的Flask REST API有多安全?

有一个在我的瓶API的前监听的私人端口5000的客户端API请求先去龙卷风服务器,然后调用API瓶

这是我有流动的旋风Web服务器去:

我的网站(在http)---> corpauthentication(上HTTPS) - >回我的网站(HTTP) - >客户端调用龙卷风服务器 - >龙卷风调用API瓶和返回结果

我的API和网站有多安全?我正在阅读这个链接Security of python flask REST API using HTTP Basic Authentication,在我看来,API是安全的,但我永远无法确定。

如果它不安全,您认为我能做些什么才能使它更安全?由于需要进行身份验证,因此我觉得在UI方面它非常安全。但是让我们说有人在我的端口80上进行侦听,即使有龙卷风+ httpbasic认证,他们是否能够跟踪任何API请求?

这是我的龙卷风Server代码:

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

我听说把龙卷风本身暴露在网上并不是一个好主意。我把它放在像nginx这样的web服务器后面,它可以异步地将有效的请求传递给龙卷风,并丢弃/阻止任何其他请求以及主机静态文件。您也可以将https添加到您的龙卷风实例。 – NuclearPeon

+5

您是否通过普通HTTP发送登录凭据?如果是这样,哪个端口无关紧要,这是不安全的。 – jwodder

回答

4

不,这是不安全的 - 在other question评论你链接到的是完全正确的。 (顺便提一下,你的问题真的是重复的)。

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

龙卷风确实需要坐在某种网络代理之后。你可以使用Apache或Nginx来完成这个角色。有关于在this related question中设置Tornado + Nginx的说明。