Ich habe meine eigenen zwei Cent eingezahlt, weil ein Problem noch nicht erwähnt wurde. Insbesondere stimme ich dem zu, was @NickSloan gesagt hat, aber mit einer weiteren Einschränkung.
Es gibt einen weiteren wichtigen Unterschied zwischen einem API-Schlüssel und einem Kennwort. API-Schlüssel sind für Ihre Site eindeutig. Der Teil, der die Passwortsicherheit so wichtig macht, ist die Passwortfreigabe. Wenn jemand das Kennwort erhält, das ein Benutzer auf Ihrer Website gespeichert hat, ist nicht nur Ihre Website gefährdet, sondern jede andere Website, für die der Benutzer dieses Kennwort (und die E-Mail-Adresse / den Benutzernamen) verwendet hat. Viele Benutzer verwenden Kennwörter auf kritischen Websites wieder: Banken, soziale Medien, E-Mails usw. Dies bedeutet, dass bei einer guten Kennwortsicherheit weniger der Zugriff auf Ihre Website als vielmehr der Schutz Ihrer Benutzer auf anderen Websites geschützt ist. Wir können Benutzer nicht dazu zwingen, die Sicherheit besser zu machen, daher müssen wir das Schlimmste annehmen und zusätzliche Schritte unternehmen, um ihre eigene Privatsphäre zu schützen.
Ein API-Schlüssel ist ein völlig anderes Szenario, da er nur für gilt deine Seite. Wenn es gestohlen wird, erhält der Angreifer Zugriff auf Ihre Website, erhält jedoch nichts, was er gegen die Bank / E-Mail / etc. Dieser Person nutzen kann. Dies bedeutet, dass das Risiko für API-Schlüssel tatsächlich niedriger ist als das für Kennwörter. Sie befinden sich nicht ganz im selben Bereich: API-Schlüssel ähneln eher Sitzungskennungen als Kennwörtern.
Wenn Sie verstehen, dass diese eher Sitzungskennungen als Kennwörtern ähneln, erhalten Sie einige praktische Einblicke in den richtigen Schutz solcher Kennungen Schlüssel. Beachten Sie, dass die folgende Diskussion auf API-Schlüssel für Dinge wie OAuth-Anmeldeinformationen und nicht auf Verschlüsselungsanmeldeinformationen anwendbar ist (wie von @NickSloan in seiner Antwort erläutert).
Die größten Bedrohungen für Passwörter sind Phishing-Angriffe und gehackte Datenbanken. Deshalb speichern wir sie in unseren Datenbanken. Die größten Bedrohungen für API-Schlüssel sind dieselben wie für Sitzungsschlüssel: Schwachstellen in Front-End-Anwendungen wie XSS-Schwachstellen, MIM und dergleichen. Es ist wichtig zu beachten, dass die Front-End-Anwendung das Kennwort in unverschlüsselter Form benötigt, sodass das Hashing des API-Schlüssels Ihnen nichts bringt, wenn die Person, die es am wahrscheinlichsten gestohlen hat, es im Klartext benötigt.
Stattdessen schützen Sie eine Sitzungskennung (oder ein OAuth-Token oder einen clientspezifischen API-Schlüssel) hauptsächlich, indem Sie den Client verfolgen. Wenn eine Sitzungskennung über XSS oder andere Mittel vom Client gestohlen wird, besteht ein typisches Ergebnis darin, dass diese Kennung vom Angreifer auf einem neuen Gerät verwendet wird. Das bedeutet, dass plötzlich ein alter Schlüssel mit einem neuen Benutzeragenten angezeigt wird. Eine solche Änderung ist leicht zu erkennen und zu beheben: Alle API-Schlüssel werden sofort ungültig. Insbesondere bei OAuth-Anfragen ist dies für den Benutzer sehr schmerzlos: Er meldet sich einfach wieder an und erhält sofort einen neuen, während jemand, der nur den Schlüssel gestohlen hat (und kein Passwort hat), wieder am Zeichenbrett sitzt .
Dies ist eine häufig genug vorkommende Verteidigungsmaßnahme, bei der ein intelligenterer Hacker auch versucht, den mit dem gestohlenen Schlüssel verknüpften Benutzeragenten aufzuzeichnen und in allen zukünftigen Anforderungen zu verwenden wenn derselbe Benutzer Anforderungen von mehreren IP-Adressen hat. Wie alles andere auf der Welt kann dies ein Katz-und-Maus-Spiel sein, aber es gibt einige wichtige Take-Aways:
- Ein API-Schlüssel / OAuth-Token / Sitzungs-ID ist Eigentlich nur eine Möglichkeit, sich an einen Benutzer auf einem bestimmten Gerät zu erinnern, damit er nicht auf jeder Seite sein Passwort eingeben muss. Im Zweifelsfall können Sie daher einfach alle autorisierten Schlüssel löschen und den Benutzer zwingen, sich erneut anzumelden.
- In allen drei Fällen ist es wichtig, eine aktive Sicherheit in Bezug auf diese Dinge zu haben und zu erkennen / zu reagieren, wenn etwas faul passiert, da der Verlust von Schlüssel / Token / ID zu einer Gefährdung eines Kontos führt. Wenn Sie jemals von Facebook / Google / etc Benachrichtigungen über jemanden erhalten haben, der versucht, sich aus Mexiko in Ihr Konto einzuloggen, liegt dies daran, dass ein Sicherheitsbeamter irgendwo seine Arbeit richtig macht.
- Die primären Angriffsmethoden für Keys / Token / IDs unterscheiden sich von denen von Passwörtern. Möglicherweise möchten Sie sie weiterhin in Ihrer Datenbank hashen (auch hier handelt es sich nicht um Verschlüsselungsdaten, die im Klartext vorliegen müssen), aber Sie können sie nicht einfach in Ihrer Datenbank hashen und sich selbst als sicher bezeichnen. Sie müssen sicherstellen, dass sie gegen eine ganze Reihe neuer Angriffsmethoden geschützt sind. Wenn Sie sie nur als Passwörter betrachten, werden Sie einige wichtige Teile des Gesamtbildes übersehen.
ol>