限制对python tornado web中某些文件、文件夹的访问

2024-10-02 00:30:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我在python3中启动了一个tornado web服务器,下面是一些简化的启动代码:

import tornado.ioloop, tornado.web
root = os.path.dirname(__file__)
startPage = 'index.html' 

class allStops(tornado.web.RequestHandler):
    def get(self):
        self.write('yo man')

def make_app():
    return tornado.web.Application([
        (r"/API/allStops", allStops),
        (r"/(.*)", tornado.web.StaticFileHandler, {"path": root, "default_filename": startPage})
    ])

if __name__ == "__main__":
    app = make_app()
    app.listen(5005)
    tornado.ioloop.IOLoop.current().start()

网络服务器工作正常。我周围有各种各样的文件和文件夹索引.html. 所以当我们在浏览器中打开localhost:5005时,我们会看到索引.html所有的东西都可以在一个静态的网站上访问。我也可以通过输入URL直接访问它们。在

这就是我的问题所在。如果这个程序在launch.py中,那么我可以通过localhost:5050/launch.py从浏览器看到整个程序。我想不允许。我还想阻止浏览器访问特定子文件夹的内容。但同时,我不想限制对所有其他文件和文件夹的访问:默认的allow all状态是好的。我该怎么做?在


Tags: pathself服务器文件夹webappmakedef
1条回答
网友
1楼 · 发布于 2024-10-02 00:30:50

子类StaticFileHandler,然后验证^{}方法中的文件名。对不想服务的文件引发404或403个错误。在

from tornado import web
from tornado.web import HTTPError

class MyStaticFileHandler(web.StaticFileHandler):
    def validate_absolute_path(self, root, absolute_path):
        if absolute_path.endswith('.py'):
            # raise 403 Forbidden error for all files ending with .py
            raise HTTPError(403)

        return super().validate_absolute_path(root, absolute_path)

然后在url处理程序中使用这个类。在


自定义错误响应:

如果设置debug=False,那么Tornado将自动显示与状态代码相关的适当消息,而不是异常。在

如果要发送自定义错误模板,可以执行以下操作:

^{pr2}$

相关问题 更多 >

    热门问题