rudirabbit:
Mann wie bist du drauf, so eben mal weil gerade langeweile 8)
Ist ja im wesentlichen nur das vorhandene Demoprogramm zum Ethernet-Shield.
Einmal alles kopieren und ein paar Zeilen ändern.

rudirabbit:
Wenn ich deinen Code ansehe, glaube ich den Vorgang fast verstanden zu haben.
Wenn Du Fragen hast, einfach fragen!
Im Endeffekt geht es nur um Anforderungen vom Client und Antworten vom Server.
Wenn der Server eine Datei nur mit vorheriger Authentifizierung ausliefern soll, dann wartet der Server auf eine Zeile im Header, die anfängt mit:
Authorization: Basic ...
Wenn diese Zeile in Header nicht vorkommt oder die Kombination Username/Passwort falsch ist, dann sendet der Server anstelle der angeforderten Daten einen Statuscode Error-401 und fordert damit Username/Passwort an. Der Server sendet dazu eine Zeile, die anfängt mit:
WWW-Authenticate: Basic ...
Als "..." kann noch ein kurzer erläuternder Hinweis für den User mitgesendet werden, im Beispiel einfach nur "Secure Area", aber da könnte auch ein ganzer langer Satz mitgesendet werden.
Sobald ein Web-Browser auf eine Anforderung einen Error-401 Statuscode und die Aufforderung "WWW-Authenticate: Basic" vom Server zurückbekommt, wird jeder Browser jedes Browserherstellers automatisch ein Eingabefenster für Username und Passwort öffen und vom User abfragen. Wenn der User diese Daten eingibt, werden sie mit einer "Authorization: Basic" im Header wieder an den Server zurückgesendet und dieselben Daten nochmal angefordert.
Dabei handelt es sich übrigens um eine Single-Sign-on Authentifikation, d.h. der Browser merkt sich, dass eine Autentifikation angefordert wurde und er sendet bei nachfolgenden Anfragen, auch wenn andere Daten angefordert werden, während derselben "Session" immer dieselbe Authentifikation mit, so dass nicht bei jeder neuen Seite auch neu autentifiziert werden muss, sondern nur einmal pro "Session", also im Allgemeinen so lange das Browserprogramm nicht beendet wird.
rudirabbit:
Nicht raten, ich denke das heißt:
php:nein
base64 codiert.
Bravo, genau so ist es!
Username und Passwort werden einfach BASE64 codiert gesendet. Und da die Sendungen bei HTTP unverschlüsselt sind, kann die Daten leicht rückwärts dekodieren, wenn der codierte String bekannt ist. Hacker, die den Datenverkehr belauschen können, könnten das Passwort abfischen durch eine "Man-in-the-middle-Attacke", wenn sie sich irgendwo in den Datenverkehr einklinken können.
Diese Angriffsmöglichkeit ließe sich nur durch (verschlüsseltes) HTTPS statt (unverschlüsseltes) HTTP ausschalten, aber Arduino hat nicht genug Speicher und Rechenpower, um verschlüsselte HTTPS-Verbindungen aufzubauen.
Wie ich gezeigt habe, muß der Server nicht einmal BASE64-Verschlüsselung selbst beherrschen, wenn man dem Server die verschlüsselte Username/Passwort-Kombination zum Vergleichen gibt. Nur der Browser muss in der Lage sein, aus dem eingegebenen Usernamen und Passwort den verschlüsselten String zu bilden.
Das oben gepostete Demoprogramm kann auch gleich zum Ermitteln der verschlüsselten Strings verwendet werden, die man ins Programm einbauen kann. Da der Browser jeden beliebigen Usernamen und jedes beliebige Passwort verschlüsselt und an den Server sendet, und mein Demoprogramm die empfangenen Header im seriellen Monitor anzeigt, erscheinen die verschlüsselten Strings im seriellen Monitor, man braucht nur im seriellen Monitor nach der Zeile "Authorization: Basic" Ausschau halten und kann den verschlüsselten String, der vom Browser empfangen wurde, dort direkt ablesen.
Wie gesagt, Basic-Authentifikation per HTTP ist kein Hexenwerk.
Das ist eines der wenigen Dinge, die im Internet heute noch genau so wie vor 20 Jahren funktionieren, das beherrscht jeder handelsübliche Webbrowser, und zwar komplett ohne Browser-Kompatibilitätsprobleme. Und man kann diese Authentifizierung mit geringem Aufwand sogar in einem Arduino-Webserver einbauen, weil serverseitig dafür weder viel Speicher noch viel Rechenpower benötigt wird (und schon gar nicht PHP).