2012-11-20 4 views
5

Ich arbeite an einem etwas esoterischen Projekt, wo wir einige grundlegende Authentifizierung in einem kleinen/langsamen Embedded-Mikro (kein OS) implementieren müssen. Das Gerät bedient über seinen seriellen Port ein paar Webseiten, die dann durch ein wenig Hardware, über die wir keine Kontrolle haben, über das IP-Netzwerk gesprüht werden.Leichte Web-Authentifizierung für Embedded-System

Der Server-Code, wie es ist (glaube nweb auf eine Hungerkur Diät), nimmt HTTP GET/POST-Anfragen und spuckt Seiten & ändert seine Einstellungen entsprechend.

Wir brauchen eine Möglichkeit, eine Benutzeranmeldung/-sitzung zu authentifizieren, damit Personen keine Daten sehen oder Einstellungen ändern können, die sie nicht sollten.

Das Gerät ist nicht dazu gedacht, direkt dem Internet ausgesetzt zu sein oder zu 100% zu einem ernsthaften Hacking unzugänglich zu sein (Netzwerksicherheit/Trennung ist das Problem des Kunden *), die Sicherheitsanforderung besteht eher darin, die unteren Ränge vor den blinklern zu bewahren ;) Wegen des Platzmangels/der Verarbeitungsleistung (angenommen, wir haben ~ 2k Coderaum und nicht viele MHz) können wir Dinge wie SSL nicht implementieren, aber es wäre schön, mindestens einen besseren als zu gehen der Moorstandard HTTP access control.

Wir können GET, POST verarbeiten und Cookie-Daten setzen/lesen. Eine Sache, die unser Mikro hat, ist ein anständiger Krypto-Standard-Hardware-Zufallszahlengenerator, sollte das überhaupt helfen.

  • = Wirklich die Kunden sollten das Gerät auf seinem eigenen Netzwerk, physisch getrennt oder zumindest zu Tode geheilt, von etwas anderem hängen. Aber hey, wenn es für Boeing funktioniert ...
  • Antwort

    1

    Wenn Sie nur gegen Zugriff schützen möchten: Immer wenn es eine GET-Anfrage gibt, suchen Sie nach einem Cookie des Passworts. Wenn der Cookie nicht gesetzt ist, senden Sie ein HTML-Anmeldeformular zurück, das das Passwort an den Server sendet. Wenn der Server die POST-Daten mit dem richtigen Passwort erhält, senden Sie eine "eingeloggte OK" -Seite zurück, die COOKIE auf das Passwort setzt. Dann wird jeder, der sich anmeldet (mit dem richtigen Passwort offensichtlich), den Cookie in allen zukünftigen GET-Requests gesetzt haben. Wer sich nie eingeloggt hat, sieht immer die Login-Seite. Sie können es "verstecken", indem Sie zwei Cookie-Werte setzen: Eine Zufallszahl und das XOR des Zufalls und das Passwort. Auf diese Weise können die Kunden nicht herausfinden, welche Werte in den Cookies enthalten sind. Wenn Sie weiter gehen und XOR es sagen, die Client-IP, Clients werden nicht in der Lage sein, die Cookies auf andere Computer zu kopieren. Der Server wird immer in der Lage sein, alles aufzuheben und das Passwort/ip aus der Zufallszahl und den anderen Cookie-Werten herauszufinden.

    Wenn Sie einfache Verschlüsselung haben möchten, können Sie XMLHTTPREQUESTS in Javascript verwenden. Lassen Sie den Server Daten mit einem einfachen Zufallszahlengenerator von puesdo verschlüsseln (oder einfach mit einer XOR-Objekfunzierung oder was auch immer) und lassen Sie den Client dasselbe in Javascript rückwärts machen. Sie können den Server jede Seite mit Ausnahme von index.html verschlüsseln lassen, und in index.html können Sie ihn haben, so dass er XMLHTTPREQUESTS die anderen Seiten in Javascript und entschlüsselt sie, dann legt den Inhalt in ein div mit innerHTML oder was auch immer.