{"id":874,"date":"2023-07-08T11:44:27","date_gmt":"2023-07-08T09:44:27","guid":{"rendered":"https:\/\/www.iot-embedded.de\/iot-2023\/?p=874"},"modified":"2023-07-08T11:44:29","modified_gmt":"2023-07-08T09:44:29","slug":"die-sache-mit-der-sicherheit-anmeldungen-verarbeiten","status":"publish","type":"post","link":"https:\/\/www.iot-embedded.de\/iot-2023\/2023\/07\/08\/die-sache-mit-der-sicherheit-anmeldungen-verarbeiten\/","title":{"rendered":"Die Sache mit der Sicherheit&#8230;\u00a0Anmeldungen verarbeiten"},"content":{"rendered":"\n<p>Nachdem klar war, dass es auf unserer Seite einen User-Login geben w\u00fcrde, entstand schnell die Frage: Wie setzen wir diesen um?<br>Dabei gibt es mehrere M\u00f6glichkeiten, hier nur drei Beispiele:<\/p>\n\n\n\n<p><br>1. Session-basierte Authentifizierung: Bei dieser Methode wird eine serverseitige Sitzung (Session) verwendet, um den Authentifizierungsstatus des Benutzers zu verfolgen. Der Server generiert eine eindeutige\u00a0Sitzungs-ID, die in einem Cookie oder als Teil der URL an den Client gesendet wird. Der Client sendet diese\u00a0Sitzungs-ID\u00a0bei jeder Anfrage an den Server, um den Authentifizierungsstatus des Benutzers zu \u00fcberpr\u00fcfen.<\/p>\n\n\n\n<p><br>2. Token-basierte Authentifizierung: Bei der tokenbasierten Authentifizierung erh\u00e4lt der Benutzer nach der erfolgreichen Anmeldung ein Token. Dieses Token wird entweder im Local Storage, im Session Storage oder als Cookie auf dem Client gespeichert. Bei jeder Anfrage an den Server wird das Token an den Server gesendet, um den Authentifizierungsstatus zu \u00fcberpr\u00fcfen. Token k\u00f6nnen verschiedene Formate haben, wie z.B. JSON Web Tokens (JWT) oder einfache Zugriffstoken.<\/p>\n\n\n\n<p><br>3. Cookie-basierte Authentifizierung: Bei der Cookie-basierten Authentifizierung wird ein Cookie mit einem eindeutigen Identifikator auf dem Client gespeichert. Dieser Identifikator wird bei jeder Anfrage an den Server gesendet und auf dem Server mit dem entsprechenden Benutzer verkn\u00fcpft. Cookies bieten die M\u00f6glichkeit, den Ablaufzeitpunkt zu definieren und k\u00f6nnen sowohl f\u00fcr die Authentifizierung als auch f\u00fcr die Sitzungsverwaltung verwendet werden.<br><\/p>\n\n\n\n<p>Nach einiger Zeit zum Bedenken entschieden wir uns f\u00fcr die Nutzung der Token-basierten Authentifizierung im Local Storage. Dieser hat zwar h\u00f6here Sicherheitsrisiken, welche jedoch in unserem Kontext zu akzeptieren sind. Die App wird in der Form nicht direkt online gestellt und ist daher keinem direkten Risiko eines Angriffes ausgesetzt. Des Weiteren spielte vor allem die vereinfachte Entwicklung eine Rolle, da \u00fcber mehrere Iterationen hinweg Anpassungen vorgenommen werden. Mit dem Local Storage kann so einfach per Hand der Nutzer zu einem Admin gemacht werden:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.iot-embedded.de\/iot-2023\/wp-content\/uploads\/sites\/6\/2023\/07\/image-5.png\" alt=\"\" class=\"wp-image-877\" width=\"259\" height=\"101\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2023\/wp-content\/uploads\/sites\/6\/2023\/07\/image-5.png 363w, https:\/\/www.iot-embedded.de\/iot-2023\/wp-content\/uploads\/sites\/6\/2023\/07\/image-5-300x117.png 300w\" sizes=\"(max-width: 259px) 100vw, 259px\" \/><\/figure>\n\n\n\n<p><br>Braucht man dagegen wieder den normalen Nutzer, reicht es, das Item per Hand (unter Entwicklertools\/Anwendung) zur\u00fcck zu \u00e4ndern zu \u201efalse\u201c. Dasselbe gilt auch f\u00fcr das Wechseln der Nutzer, hier lediglich bei\u00a0LoggedUser\u00a0den gew\u00fcnschten Nutzer eintragen. Damit hier zumindest teilweise Sicherheit besteht, wurden die 11-stelligen, nicht aufeinanderfolgenden Nutzer-IDs gew\u00e4hlt anstatt einfacher Namen. Im Code selbst ist die Entwicklung ebenfalls recht komfortabel: Mit einer einfachen localStorage.getItem(\u201exxx\u201c)-Anweisung sind die Daten gelesen und k\u00f6nnen auf der Seite weiterverarbeitet werden:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img decoding=\"async\" loading=\"lazy\" src=\"https:\/\/www.iot-embedded.de\/iot-2023\/wp-content\/uploads\/sites\/6\/2023\/07\/image-4.png\" alt=\"\" class=\"wp-image-876\" width=\"388\" height=\"39\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2023\/wp-content\/uploads\/sites\/6\/2023\/07\/image-4.png 726w, https:\/\/www.iot-embedded.de\/iot-2023\/wp-content\/uploads\/sites\/6\/2023\/07\/image-4-300x30.png 300w\" sizes=\"(max-width: 388px) 100vw, 388px\" \/><\/figure>\n\n\n\n<p>Dasselbe gilt auch f\u00fcr das Setzen und Aktualisieren des Local Storage, bei der im \u00e4hnlichen Sinne dann \u201esetItem\u201c benutzt werden kann.<br><br>Somit ist die Nutzung des Local Storage sehr praktisch f\u00fcr die Entwicklung innerhalb eines geschlossenen Projektes wie diesem. F\u00fcr \u00f6ffentlich zug\u00e4ngliche Apps sollte dieser jedoch niemals genutzt werden! Wie\u00a0gezeigt, k\u00f6nnen die Werte mit zwei Klicks manipuliert werden \u2013 kenne ich den Nutzernamen eines Dritten, komme ich so auch in seinen Account. Somit w\u00e4re vor dem hypothetischen Go-live unseres Projektes zuallererst die Implementierung einer besseren Methode zu Authentifizierung geboten. Es empfiehlt sich zudem\u00a0die\u00a0Zahl der m\u00f6glichen Anmeldeversuche zu beschr\u00e4nken, was bei der Entwicklung ebenfalls sehr st\u00f6rend gewesen w\u00e4re, und zuletzt die Implementierung eines Anmelde-Logs, der jegliche Anmeldeversuche samt Metadaten speichert. Ein \u00f6ffentliches Sicherheitskonzept w\u00e4re f\u00fcr uns allerdings in diesem Projektrahmen von drei Monaten nicht umsetzbar gewesen.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nachdem klar war, dass es auf unserer Seite einen User-Login geben w\u00fcrde, entstand schnell die Frage: Wie setzen wir diesen um?Dabei gibt es mehrere M\u00f6glichkeiten, hier nur drei Beispiele: 1. Session-basierte Authentifizierung: Bei dieser Methode wird eine serverseitige Sitzung (Session)<\/p>\n","protected":false},"author":32,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[9],"tags":[50,13,51],"_links":{"self":[{"href":"https:\/\/www.iot-embedded.de\/iot-2023\/wp-json\/wp\/v2\/posts\/874"}],"collection":[{"href":"https:\/\/www.iot-embedded.de\/iot-2023\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.iot-embedded.de\/iot-2023\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2023\/wp-json\/wp\/v2\/users\/32"}],"replies":[{"embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2023\/wp-json\/wp\/v2\/comments?post=874"}],"version-history":[{"count":1,"href":"https:\/\/www.iot-embedded.de\/iot-2023\/wp-json\/wp\/v2\/posts\/874\/revisions"}],"predecessor-version":[{"id":878,"href":"https:\/\/www.iot-embedded.de\/iot-2023\/wp-json\/wp\/v2\/posts\/874\/revisions\/878"}],"wp:attachment":[{"href":"https:\/\/www.iot-embedded.de\/iot-2023\/wp-json\/wp\/v2\/media?parent=874"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2023\/wp-json\/wp\/v2\/categories?post=874"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2023\/wp-json\/wp\/v2\/tags?post=874"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}