防止直接文件访问龙卷风中的服务器文件

时间:2017-09-25 02:33:45

标签: python tornado

我正在使用龙卷风webserver的python。 应用程序工作正常,但我找不到阻止用户直接通过URL访问服务器文件的方法。 例如,我在服务器中有以下文件:

program.py
index.html的
main.html中

我想阻止用户通过网址直接访问上述服务器文件 例如:localhost:8080 / program.py或/index.html

我只希望他们访问localhost:8080 /或/ home

提前致谢

from ws4py.client.tornadoclient import TornadoWebSocketClient
import tornado.ioloop
import tornado.web
import tornado.websocket
import tornado.template

SETTING_CLIENT_LISTEN_PORT = 8080
class MainHandler(tornado.web.RequestHandler):

    def get(self):
        try:
            loader = tornado.template.Loader(".")
            self.write(loader.load("index.html").generate())
        except Exception as e:
            print("exception occured", e)

class CWSHandler(tornado.websocket.WebSocketHandler):
    global  waiters

    def open(self):
        print('###FUNCTION CWSHandler.open(self) start')

    def on_close(self):
        print('###FUNCTION CWSHandler.open(self) close')

    def on_message(self, message):
        print('###FUNCTION CWSHandler.on_message msg:', message)

settings = {
    "cookie_secret": "bZJc2sWbQLKos6GkHn/VB9oXwQt8S0R0kRvJ5/xJ89E=",
    "login_url": "/",
}

application = tornado.web.Application(handlers=[
    (r'/', MainHandler),    
    (r'/cws', CWSHandler),


    (r"/(.*)", tornado.web.StaticFileHandler,{'path':'./'})
    ], cookie_secret="bZJc2sWbQLKos6GkHn/VB9oXwQt8S0R0kRvJ5/xJ89E=")

if __name__ == "__main__":
    server = tornado.httpserver.HTTPServer(application)
    server.listen(SETTING_CLIENT_LISTEN_PORT)

    try:
        tornado.ioloop.IOLoop.instance().start()
        server.stop()
    except KeyboardInterrupt:
        print("Keyboard interupt")
        pass
    finally:
        server.stop()
        tornado.ioloop.IOLoop.instance().stop()

1 个答案:

答案 0 :(得分:2)

问题在于你的网址,具体是:

<nav class="navbar navbar-default" role="navigation">
  <div class="container-fluid">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      <a class="navbar-brand" href="<?php echo home_url(); ?>">
                <?php bloginfo('name'); ?>
            </a>
    </div>

        <?php
            wp_nav_menu( array(
                'menu'              => 'primary',
                'theme_location'    => 'primary',
                'depth'             => 2,
                'container'         => 'div',
                'container_class'   => 'collapse navbar-collapse',
                'container_id'      => 'bs-example-navbar-collapse-1',
                'menu_class'        => 'nav navbar-nav',
                'fallback_cb'       => 'WP_Bootstrap_Navwalker::fallback',
                'walker'            => new WP_Bootstrap_Navwalker())
            );
        ?>
    </div>
</nav>

您已将index.filter(x => x._1 == 1).map(x => println(x._2))映射到(r"/(.*)", tornado.web.StaticFileHandler,{'path':'./'}) ,这是您的项目目录。因此,如果请求与r'/(.*)'类似,则会与此匹配 - {'path': './'},然后龙卷风会在项目目录中查找名为localhost:8080/program.py的文件。如果它在那里找到它,它将提供该文件。

您应该将所有静态文件保存在项目目录中名为/(.*)的单独目录中(您可以将其命名为任何名称)。然后使用所需的URL映射此目录。

示例:

program.py

或者更好的是,在static网址而非 - (r"/(.*)", tornado.web.StaticFileHandler,{'path': 'static'}) 下投放该目录。

/static/