2017-09-25 6 views
1

Ich benutze Python mit Tornado-Webserver. die Anwendung funktioniert gut, aber ich finde keine Möglichkeit, den Benutzer beim Zugriff auf Server-Dateien direkt über die URL zu verhindern. zum Beispiel habe ich die folgenden Dateien auf dem Server:Verhindern direkten Dateizugriff auf Server-Dateien in Tornado

program.py
index.html
main.html

i der Benutzer Zugriff auf die über Server-Dateien direkt über Web-URL verhindern wollte
ex: localhost: 8080/program.py oder /index.html

ich wollte sie nur localhost zugreifen: 8080/oder/home

Vielen Dank im Voraus

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() 
+0

Wenn sie Zugriff haben, liegt es daran, dass Sie sie aktivieren. Veröffentlichen Sie Ihren Code, wenn Sie spezielle Ratschläge benötigen. – RobertB

+0

Hallo habe meinen Code hinzugefügt. danke – chipnot

Antwort

2

Das Problem mit Ihrem urls ist, insbesondere:

(r"/(.*)", tornado.web.StaticFileHandler,{'path':'./'}) 

Sie haben r'/(.*)'-{'path': './'} abgebildet, die Ihr Projektverzeichnis ist. Wenn also eine Anfrage wie localhost:8080/program.py eintrifft, wird sie damit abgeglichen - /(.*) und Tornado wird dann in Ihrem Projektverzeichnis nach einer Datei mit dem Namen program.py suchen. Wenn es dort gefunden wird, wird es diese Datei liefern.

Sie sollten alle Ihre statischen Dateien in einem separaten Verzeichnis mit dem Namen static (Sie können es nennen, was Sie wollen, aber) in Ihrem Projektverzeichnis. Dann ordnen Sie dieses Verzeichnis mit der gewünschten URL zu.

Beispiel:

(r"/(.*)", tornado.web.StaticFileHandler,{'path': 'static'}) 

Oder noch besser dienen, das Verzeichnis unter einer /static/ url statt - .*.

(r"/static/(.*)", tornado.web.StaticFileHandler,{'path': 'static'}) 
+0

vielen Dank für den statischen Pfad. Das ist das, was ich benötige. danke nochmal – chipnot

+0

@chipipot Gern geschehen. Wenn diese Antwort Ihr Problem behoben hat, klicken Sie auf das ** Häkchen-Symbol ** auf der linken Seite dieser Antwort. – xyres

+0

erledigt. Danke noch einmal – chipnot

Verwandte Themen