2012-11-20 13 views
5

Pracuję nad nieco ezoterycznym projektem, w którym musimy wdrożyć podstawowe uwierzytelnianie w małym/powolnym wbudowanym mikro (bez OS). Urządzenie służy kilku stronom internetowym poprzez port szeregowy, który następnie zostaje zasysany przez sieć IP przez sprzęt, nad którym nie mamy kontroli.Lekkie uwierzytelnianie w sieci dla systemu wbudowanego

Kod serwera, taki jak jest (pomyśl nweb o diecie głodowej), pobiera żądania HTTP GET/POST i wypluwa strony & zmienia odpowiednio ustawienia.

Potrzebujemy jakiegoś sposobu uwierzytelnienia logowania użytkownika/sesji, abyśmy nie zezwalali ludziom na przeglądanie danych lub zmianę ustawień, których nie powinni.

Urządzenie nie jest przeznaczone do bezpośredniego kontaktu z internetem lub w 100% niepodatne na poważne hakowanie (bezpieczeństwo/separacja sieci stanowi problem klienta *), wymóg bezpieczeństwa polega bardziej na tym, aby niższe stopnie nie dotykały lamp błyskowych ;)

Z powodu braku miejsca/mocy obliczeniowej (zakładamy, że mamy ~ 2k przestrzeni kodu i nie wiele MHz) nie możemy implementować rzeczy takich jak SSL, ale byłoby miło pójść co najmniej jeden lepszy niż standard bagienny HTTP access control.

Możemy obsłużyć GET, POST i ustawić/odczytać dane cookie. Jedną rzeczą, którą ma nasze mikro jest przyzwoity, crypto-standardowy sprzętowy generator liczb losowych, o ile w ogóle to pomoże.

  • = Naprawdę klienci powinni zawiesić urządzenie we własnej sieci, fizycznie rozłączone lub co najmniej zaporę ogniową na śmierć, przed wszystkim innym. Ale hej, jeśli to działa dla Boeinga ...

Odpowiedz

1

Jeśli chcesz tylko zabezpieczyć się przed dostępem: Za każdym razem, gdy pojawi się żądanie GET, poszukaj pliku cookie z hasłem. Jeśli plik cookie nie jest ustawiony, wyślij formularz logowania HTML, który wysyła do serwera hasło POST. Jeśli serwer otrzyma dane POST z poprawnym hasłem, wyślij stronę "zalogowany w porządku", która ustawia COOKIE na hasło. Wtedy każdy, kto się zaloguje (oczywiście z właściwym hasłem), będzie miał plik cookie we wszystkich przyszłych żądaniach GET. Każdy, kto nigdy nie zalogował się, zawsze będzie widzieć stronę logowania. Możesz go "ukryć", ustawiając dwie wartości cookie: losową liczbę i XOR losowego i hasło. W ten sposób klienci nie będą w stanie ustalić, jakie wartości znajdują się w plikach cookie. Jeśli pójdziesz dalej i po XOR, powiedzmy IP klienta, klienci nie będą mogli kopiować plików cookie na inne komputery. Serwer zawsze będzie w stanie odłączyć wszystko i znaleźć hasło/ip z losowej liczby i innych wartości cookie.

Jeśli chcesz mieć proste szyfrowanie, możesz użyć XMLHTTPREQUESTS w javascript. Niech serwer zaszyfruje dane za pomocą prostego generatora liczb losowych puebo (lub po prostu obsłużenia XOR lub cokolwiek innego), a klient powinien zrobić to samo w tył w javascript. Możesz kazać serwerowi szyfrować każdą stronę z wyjątkiem powiedz: index.html, aw index.html możesz ją mieć, aby XMLHTTPREQUESTS inne strony w javascript i odszyfrowuje je, a następnie umieszcza zawartość w div za pomocą innerHTML lub cokolwiek innego.