2012-11-20 6 views
5

Je travaille sur un projet légèrement ésotérique où nous devons implémenter une authentification de base dans un micro embarqué petit/lent (sans système d'exploitation). L'appareil sert un couple de pages Web via son port série qui est ensuite injecté sur le réseau IP par un peu de matériel sur lequel nous n'avons aucun contrôle.Authentification Web légère pour système embarqué

Le code du serveur, tel qu'il est (pensez nweb sur un régime de famine), prend en requêtes HTTP GET/POST et crache les pages & modifie ses paramètres en conséquence.

Nous avons besoin d'un moyen d'authentifier une connexion/session d'utilisateur afin de ne pas permettre aux utilisateurs de voir les données ou de modifier les paramètres qu'ils ne devraient pas.

L'appareil n'est pas destiné à être directement exposé à Internet ou à être totalement imprenable à un piratage sérieux (la sécurité du réseau est la question du client *), l'exigence de sécurité consiste à empêcher les rangs inférieurs de toucher les lumières clignotantes. En raison du manque d'espace/de puissance de traitement (supposons que nous ayons ~ 2k d'espace de code et pas beaucoup de MHz) nous ne pouvons pas implémenter des choses comme le SSL, mais ce serait bien d'en faire au moins un de mieux que la norme de tourbière HTTP access control.

Nous pouvons gérer GET, POST et définir/lire des données de cookies. Une chose que notre micro possède est un générateur de nombres aléatoires matériel crypto-standard décent, devrait être de toute aide du tout.

  • = Vraiment les clients devraient accrocher l'appareil sur son propre réseau, physiquement déconnecté ou au moins pare-feu à mort, de toute autre chose. Mais bon, si ça marche pour Boeing ...

Répondre

1

Si vous ne souhaitez que pour protéger contre l'accès: Chaque fois qu'il ya une requête GET, recherchez un cookie du mot de passe. Si le cookie n'est pas défini, renvoyez un formulaire de connexion HTML qui envoie le mot de passe au serveur. Si le serveur obtient les données POST avec le mot de passe correct, renvoyez une page "connecté OK" qui définit le mot de passe COOKIE. Ensuite, toute personne qui se connecte (avec le bon mot de passe évidemment) aura le cookie défini dans toutes les futures requêtes GET. Toute personne qui ne s'est jamais connectée verra toujours la page de connexion. Vous pouvez le 'cacher' en définissant deux valeurs de cookie: Un nombre aléatoire, et le XOR de l'aléatoire et le mot de passe. De cette façon, les clients ne seront pas en mesure de comprendre quelles sont les valeurs dans les cookies. Si vous allez plus loin et XOR avec l'adresse IP du client, les clients ne seront pas en mesure de copier les cookies sur d'autres ordinateurs. Le serveur sera toujours capable de tout faire et de comprendre le mot de passe/ip du nombre aléatoire et les autres valeurs de cookie.

Si vous voulez un chiffrement simple, vous pouvez utiliser XMLHTTPREQUESTS en javascript. Demandez au serveur de chiffrer les données avec un simple générateur de nombres aléatoires (ou simplement une obsflection XOR ou quoi que ce soit d'autre) et demandez au client de faire la même chose à l'envers en javascript. Vous pouvez demander au serveur de crypter toutes les pages sauf index.html, et dans index.html vous pouvez l'avoir pour qu'il XMLHTTPREQUESTS les autres pages en javascript et les décrypte, puis place le contenu dans un div en utilisant innerHTML ou autre.

Questions connexes