Ethernetshield Sicherheit

Gibt es eine Möglichkeit, dass nur bestimmte Geräte auf den Webserver meines Arduinos zugreifen können?

Ja, es gibt eine Möglichkeit, allerdings wird die von der Arduino-Ethernet-Bibliothek nicht unterstützt. Der WizeNet 5100 Chip des Ethernet Shields hat aber Register, in welchen die IP- und die MAC-Adresse des Kommunikationspartners abgelegt werden. Wenn Du weitergehende Absicherungen haben möchtest, könntest Du eine Basic-Authentisierung einbauen.

Genügt Dir das noch nicht, nimm den Webserver vom Arduino weg und lass ihn auf einem Linux-Rechner laufen, dort steht Dir auch SSL zur Verfügung. Beim Arduino Yun wird das z.B. gemacht (also kein SSL, aber die Auftrennung, SSL wäre aber auch möglich).

scr34m_818:
Gibt es eine Möglichkeit, dass nur bestimmte Geräte auf den Webserver meines Arduinos zugreifen können?

Am einfachsten wäre vermutlich eine Zugriffsregelung überHTTP Basic Authentication zu realisieren, also Zugriffsrechte auf Benutzerebene mit "Username" und "Passwort". Das unterstützt seit ca. 40 Jahren jeder Webbrowser, weil das Protokoll dafür bereits in der Frühzeit des WWW erfunden wurde, und es läßt sich auch in Arduino-Webserver integrieren.

Bei einer Zugriffsberechtigung, die nicht auf Benutzerebene mit Username/Passwort sondern auf Geräteebene vergeben werden soll, fällt mir jetzt so direkt nichts ein.

Meinte eigl. das zb. nur IPhones benutzt werden können.

Hab probiert es über client.read ausgeben zu lassen.
in meinem Test sketch funktioniert das optimal, aber wenn ich es in meinem Hauptsketch verwenden will
gibt das client.read nur "GET / HTTP/1.1" aus mehr nicht. Normalerweise müssten noch einpaar mehr zeilen kommen...

Du bist Dir schon im Klaren, dass die Browser-Identifikation praktsich beliebig gesetzt werden kann?

Clients daran zu erkennen, hat mit Sicherheit gar nichts zu tun!

Das kannst Du allenfalls tun, wenn Du weisst, dass ein spezielles Client-Programm gewisse Web-Standards nicht beherrscht (der liebe IE von Microsoft ist da immer Spitzenkandidat und für Milliarden von verschwendeten Programmiererstunden verantwortlich) und deshalb eine andere Version der HTML-Seiten erhalten soll.

Vielleicht soltest Du beschreiben, was Du eigentlich willst und nicht wie Du es machen willst. Vielleicht gibt es eine Lösung, die Du im Moment noch gar nicht erahnst.

Client Verbindet -> Ist Iphone? -> JA -> Programm/html laden.
-> Nein -> Abbruch

So ist mein Gedanke :slight_smile:

Weshalb das mit dem iPhone? Was willst Du damit erreichen? Kann ein Notebook die HTML-Seite nicht darstellen oder weshalb soll man von dort die Seite nicht abrufen können? Wie bereits gesagt: mit Sicherheit hat das überhaupt nichts zu tun.

Was auch gehen würde, nur bestimmte MAC Adressen zuzulassen. Geht das einfacher?

Ja, das ginge, allerdings nur innerhalb eines Netzwerk-Segments. Dein Clients (iPhone in dem Fall) müssten im gleichen LAN sein und es dürfte kein Router dazwischen sein, sonst sieht der Arduino nur die MAC-Adresse des Routers.

Falls es wirklich um Sicherheit geht: warum ist HTTP Basic-Auth nicht geeignet?

ich hab mir eine IOS App geschrieben die meine Website aufruft.
Ich möchte das die Seite nur darüber erreichbar ist und nicht anderweitig aufrufbar.
Http Basic-Auth wird das Anmelde fenster in der App nicht angezeigt daher ist das wenn dann der letzte ausweg

Eine App kann doch den HTTP Auth selbständig und automatisch durchführen. Ich sehe das Problem nicht.

Sprechen wir hier von reinem Inhouse-Gebrauch oder willst Du mit dem iPhone von extern zugreifen?

Ich würde es auch Extern verwenden wollen.

Ok ja dann werd ich das so machen ist wohl am Sichersten, einfachsten.

Das Anmelde fenster wird bei der App nicht angezeigt, es hängt dann in der Luft

Du musst die Anmeldung nicht dem webviewer überlassen, sondern aktiv programmieren. Ich kriege den Eindruck, Du hast keine App sondern einen Wrapper um den Browser der beim "App-Aufruf" eine Seite direkt anspringt. Eine App verwendet normalerweise kein HTML mehr, sondern macht nur noch API-Aufrufe und erledigt die Darstellung dann lokal.

Nun zur Sicherheit: Mit der Basic-Auth hast Du Script-Kiddies für ein paar Minuten auf Distanz gehalten, mit Sicherheit hat das aber wie gesagt nichts, gar nichts zu tun. Wenn Du das halbwegs sicher machen willst, hänst Du den Arduino an einen kleinen Server (z.B. Raspberry Pi), der dann das Web-Servieren übernimmt. Dann hast Du alle Möglichkeiten, von HTTPS (inkl. Client-Zertifikaten, falls Du das in der App hinkriegst) bis zu VPN-Lösungen. Ich würde nie einen Arduino direkt in's Internet hängen, selbst wenn er nur ein paar LED zum Leuchten bringt, geschweige denn, wenn er wichtigere Funktionen übernimmt.