Bottle mit .htaccess? Oder sonstwie ein Passwort?

  • Hallo zusammen,


    ich habe einen Webserver über Bottle mit forwarding für mein Alarmanlagen-Projekt laufen.
    Jetzt kann ich von überall auf die Website zugreifen und die Alarmanlage an und ausschalten, wie es mir passt.
    Blöd ist: Das kann jeder der die URL hat, was eine Alarmanlage sinnfrei macht :wallbash:


    Und genau da setzt meine Frage an.
    Ich probiere schon eine Weile mit htaccess rum, hab mir zig Videos angeschaut und hier über die SuFu nichts passendes gefunden.


    Wie bekomme ich es hin, dass ich ein Passwort eingeben muss, um auf die Index.html zu kommen?
    Wenn das passt, bräuchte ich die Möglichkeit über einen Knopfdruck am headless Pi auch auf die Seite zu kommen, kann (und will) aber manuell kein Passwort eingeben.


    Danke schon mal im Voraus :)

  • Hallo,


    Quote

    Ich probiere schon eine Weile mit htaccess rum, hab mir zig Videos angeschaut und hier über die SuFu nichts passendes gefunden.


    Kann auch nicht, weil geht so nicht :-) .htaccess ist was, was "klassische" Webserver benutzen - Bottle-Applikationen nutzen aber - wie (fast) alle Python Webframeworks WSGI


    Bottle kennt aber den `auth_basic` Dekorator:


    [code=php]import bottle


    def check_auth(username, password):
    if username == 'foo' and password == 'bar':
    return True
    else:
    return False


    @bottle.route('/')
    @bottle.auth_basic(check_auth)
    def index():
    return {'authentification': 'success'}


    if __name__ == '__main__':
    bottle.run(host='localhost', port=8080)[/php]


    Damit hast die eine einfach Authentifizierung für deine Applikation.


    Nun ist Basic Authentification nicht gerade super-sicher - mehr kann Bottle OOTB aber nicht. Von daher macht es mehr Sinn, einen "richtigen" Server wie z.B. nginx als Reverse-Proxy vorzuschalten und da dann Digest Authentification und HTTPS zu nutzen.


    Oder du nutzt ein Framework wie Django oder Flask, was mehr Möglichkeiten bei der Authentifizierung bietet.


    Gruß, noisefloor

  • Vielen Dank für die schnelle Antwort.
    Na da hätte ich ja noch lange rumprobieren können.[emoji28]


    Mit der if Abfrage werde ich mal ausprobieren. Ich habe nur die Befürchtung, dass dann das einfache Knopf Drücken nicht mehr funktioniert. Die Alarmanlage wird durch ein php Kommando scharf geschaltet und kehrt dann wieder zur Index.hmtl zurück. Das macht auch der Knopf. Aber wie kann ich mit dem Knopf User und Passwort übergeben? Geht das als Variable?


    Naja, so super sicher muss es auch nicht sein. Ich denke kaum, dass erst jemand die Website hackt, bevor er bei mir einbricht. Jedenfalls hoffe ich das [emoji23]

  • Naja hab auf die Schnelle nichts bezüglich PHP Code von mir gefunden :s
    Aber diesen Satz von mir in Beitrag#10: Mit bottle kannst du deine *.html und *.js sowie *.css Dateien weiterhin nutzen, einzig *.php musst du auf python umschreiben bzw eben weg lassen.


    Verwechselst du vielleicht JavaScript mit PHP?

  • Hm ne, mir ging es um diese Befehlsweitergaben:
    <a href="/cmd?armed=Ja"><img src="/static/on.png" alt="On"></a>
    Ist das nicht php?

  • Äääääähm nö. Ich dachte sobald da ein ? Drin ist, wäre es php.
    Ich hab doch keine Ahnung [FACE WITH TEARS OF JOY]
    Das einzige, was ich mittlerweile einigermaßen drauf habe ist Python.
    Trotzdem bleibt die Frage im Raum, wie ich das mit dem Knopf realisieren kann. [emoji16]

  • Äääääähm nö. Ich dachte sobald da ein ? Drin ist, wäre es php.


    Nein. Es müsste mindestens ein " <? " sein, aber ein einfaches "?" ist nicht gleich PHP ... In diesem Fall beginnt damit die GET Parameter Übergabe....



    Trotzdem bleibt die Frage im Raum, wie ich das mit dem Knopf realisieren kann.


    Leider ist das die Gefahr wenn man fix und fertigen Code vor die Füße gelegt kriegt aber nicht selber aufarbeitet was da eigentlich passiert...


    Was passiert denn wenn du den Button drückst?
    Es wird eine URL aufgerufen: /cmd
    ...und ein Befehl übergeben: armed=Yes
    Im bottle Script ist dafür eine route eingerichtet


    So und nun googelst du bitte mal selber nach "bottle.auth_basic" oder probierst einfach mal ein bisschen rum

  • Hallo,


    meigrafd:

    Quote

    Wieso wäre das nicht "super-sicher" ?


    Weil Benutzername und Passwort unverschlüsselt übertragen werden, siehe z.B. https://de.wikipedia.org/wiki/…rung#Basic_Authentication


    Shendayan:
    Ich habe mir den anderen Thread nicht durchgelesen, aber wenn das eine ernst gemeinte Alarmanlage für (d)ein Haus ist, dann würde ich:
    * Nicht den eingebauten Server von Bottle nehmen, weil der ist nur zum entwickeln und nicht "production ready". Da nimmt man dann z.B. nginx als Reverse-Proxy, gunicorn als WSGI-Applikationsserver und Bottle asl WSGI-App.
    * Auf _jeden_ Fall eine Authentifizierungsmethode nehmen, wo das Passwort mindestens verschlüsselt übertragen wird, ggf. aber auch so was wie OAuth oder OpenID.
    * Auf jeden Fall SSL nutzen - wozu du so wie so dann eine Server vorschalten muss.
    * Die Alarmanlage nicht über GET-Parameter steuern sondern über eine REST-API.
    * Basierend auf deinem Wissen nochmal _gut_ überlegen, ob du das mit deinem aktuellen Wissenstands umsetzen kannst - und zwar so, dass es auch produktiv sicher ist. Wenn's ein Hobby-Projekt ist, ok. Wenn die Alarmanlage aber wirklich mal was schützen soll,... hm.


    Gruß, noisefloor

  • Naja, solange der Pi nicht übers Internet ansprechbar ist kann man IMHO all deine Punkte ignorieren @ noisefloor. Also das würde ich erst hinterfragen oder zumindest dazu schreiben - denn wozu all den Aufwand wenn ein "Eindringling" erst das WLAN oder gar LAN knacken müsste, und wenn derjenige bereits im Haus ist um das Display der Alarmanlage zu bedienen, brauch derjenige nur den Stecker ziehen.....


    Wenn der Pi übers Internet ansprechbar sein soll dann sollte er viel weiter ausholen und ein umfassendes Sicherheitskonzept erstellen - da reicht dann auch kein nginx reverse-proxy


    Übrigens kann bottle dank SSLCherryPyServer auch ssl

  • Hallo,


    Quote

    Naja, solange der Pi nicht übers Internet ansprechbar ist kann man IMHO all deine Punkte ignorieren


    Völlig korrekt. Wobei ich den 1. Post zu verstanden hatte, dass das von aussen ansprechbar ist.


    Quote

    Übrigens kann bottle dank SSLCherryPyServer auch ssl


    Bottle kann OOTB kein SSL. Du brauchst immer eine SSL-fähigen Server. Das kann natürlich außer nginx auch jeder andere SSL-fähig Server sein. Wie z.B. der CherryPy WSGI-Applikationsserver.


    Gruß, noisefloor

  • Danke für die vielen Tipps!


    Also Fakt ist: Der Pi ist übers Internet erreichbar.
    Mit den von euch genannten Punkten muss ich mich erstmal auseinandersetzen.