On 2022-08-05 08:46, Arno Welzel <
use...@arnowelzel.de> wrote:
> Peter J. Holzer, 2022-08-05 10:01:
>> Naja, bei Basic Authentification fragt der Browser ja auch nicht
>> jedesmal den User, wenn er ein 401 bekommt, sondern merkt sich die
>> (Hostname, Realm, Username, Passwort)-Tupel. Das könnte er auch für
>> Bearer Authentification machen, das Problem hier ist aber, dass der
>> Input dafür vom Server kommt (ein Bearer-Token ist üblicherweise ein JWT
>> oder sonst ein signierter Blob) und nicht vom User. Man bräuchte also
>> die Möglichkeit, das programmatisch entweder präenptiv oder über einen
>> Callback zu setzen.
>
> Genau das meine ich ja - man kann den Authorization Header nicht senden,
> ohne ihn vorher vom Server anzufordern.
Äh, den Authorization Header fordert der Server an, indem er mit 401
antwortet. Der Browser sendet dann den Request ein zweites Mal,
inklusive Authorization Header. Die Frage ist, wo kommen die Daten für
den Authorization Header her? Bei Basic Authorization kommen sie aus
einem Dialog (der vielleicht wieder vom Passwort-Manager ausgefüllt
wird). Bei einem Bearer Token ist das nicht praktikabel, das muss vom
Programmcode gesetzt werden können.
>> Der Code sieht jetzt übrigens so aus:
>>
>> axios.get(endpoint, options)
>> .then((res) => {
>> const blob = new Blob([res.data], {type: res.headers["content-type"]})
>> const url = window.URL.createObjectURL(blob);
>> const link = document.getElementById("download");
>> link.href = url;
>> link.click();
>> })
>
> D.h. jeder Angreifer kann sich den Authorization Header einfach anhand
> des frei zugänglichen Code in seinem Browser per Web Developer-Console
> einfach abgreifen? Oder ist das Code, den nur Benutzer zu sehen
> bekommen, die sich vorher schon anderweitig authentifizieren mussten?
Ich verstehe die Frage nicht ganz. Der Benutzer loggt sich ein, und
bekommt ein Token. Dieses Token wird bei jedem Request in Form eines
Authorization Headers mitgeschickt. Das Code-Snippet hier wird
ausgeführt, wenn der User schon eingeloggt ist.
Ein anderer User bekommt natürlich nicht das gleiche Token und ein
Angreifer sollte das auch nie zu Gesicht bekommen. Außer der Angriff
besteht darin, dass wer in der Mittagspause nach unversperrten PCs sucht
und dann mittels Developer-Console die Tokens aus dem Browser (mit der
eingeloggten Applikation) ausliest. Wenn er das macht, hat er bis zum
Ablaufdatum des Tokens genau die gleichen Rechte wie der Browser, aus
dem er das Token ausgelesen hat, ja. Aber dafür braucht er schon Zugang
zum PC und wenn er den hat, kann er vermutlich schlimmere Dinge
anstellen.
hp