Ich habe also eine Webanwendung, die mehrere andere APIs und Dienste integriert, die eine Authentifizierung erfordern. Meine Frage ist, ist es sicher, meine Authentifizierungsinformationen in reinem Text in meinem Quellcode zu speichern? Was kann ich tun, um diese Anmeldeinformationen sicher zu speichern?
Ich denke, das ist ein häufiges Problem, deshalb würde ich gerne eine Lösung sehen, die Anmeldeinformationen in den Antworten sichert.
Als Antwort auf einen Kommentar: Ich verwende häufig PHP, Java und RoR
Ich würde gerne mehr Stimmen für eine Antwort auf diese Frage sehen.
Die Antwort lautet wie folgt:
Wahrscheinlich mehr abhängig von der Plattform ...
Das machen wir mit unseren Passwörtern.
%Vor%Niemand außer Webserverbenutzer hat Zugriff auf /etc/webapp/db/config.php, auf diese Weise schützen Sie den Benutzernamen und das Passwort vor Entwicklern.
Es ist nicht zu empfehlen.
Eine verschlüsselte web.config wäre ein geeigneterer Ort (aber Hinweis kann nicht mit einer Webfarm verwendet werden)
Der einzige Grund, das PW nicht im Code zu speichern, ist einfach das Konfigurationsproblem (d. h. das Passwort muss geändert werden und die Anwendung nicht neu kompiliert werden).
Aber die Quelle ist ein "sicherer" Ort für "sicherheitsrelevante" Inhalte (wie Passwörter, Schlüssel, Algorithmen). Natürlich ist es das.
Offensichtlich müssen sicherheitsrelevante Informationen ordnungsgemäß gesichert werden, aber das ist eine grundlegende Wahrheit, unabhängig von der verwendeten Datei. Ob es sich um eine Konfigurationsdatei, eine Registrierungseinstellung oder eine .java-Datei oder eine .class-Datei handelt.
Aus architektonischer Sicht ist es aus dem oben genannten Grund eine schlechte Idee, genauso wie Sie keine "externen" Abhängigkeiten in Ihrem Code "fest codieren" sollten, wenn Sie es vermeiden können.
Aber sensible Daten sind sensible Daten. Wenn Sie ein PW in eine Quellcodedatei einbetten, wird diese Datei empfindlicher als andere Quellcodedateien. Wenn dies Ihre Praxis ist, würde ich den gesamten Quellcode für genauso sensibel halten wie das Passwort.
Nein. Manchmal ist es unvermeidlich. Ein besserer Ansatz besteht darin, eine Architektur einzurichten, in der der Dienst implizit dem ausgeführten Code auf der Grundlage einer anderen Vertrauensstellung vertraut. (Wie z. B. dem Computer vertrauen, auf dem der Code ausgeführt wird, oder dem Anwendungsserver vertrauen, auf dem die Software ausgeführt wird)
Wenn keine von beiden verfügbar ist, wäre es vollkommen in Ordnung, einen eigenen Vertrauensmechanismus zu schreiben, obwohl ich ihn vollständig vom Anwendungscode getrennt halten würde. Außerdem würde ich empfehlen, nach Möglichkeiten zu suchen, Passwörter auch dann aus den Händen von Raubtieren fernzuhalten, wenn sie auf dem lokalen Rechner gespeichert sind. Denken Sie daran, dass Sie nichts schützen können, wenn jemand die Kontrolle über den physischen Rechner hat.
Wenn Sie den Webserver steuern und für Sicherheitsupdates warten, ist die Quelle (vorzugsweise in einem Konfigurationsmodul) oder in einer Konfigurationsdatei, die die Quelle verwendet, wahrscheinlich am besten.
Wenn Sie den Webserver nicht kontrollieren (sagen wir, Sie befinden sich auf einem gemeinsam genutzten oder sogar dedizierten Server, der von einem Hosting-Unternehmen bereitgestellt wird), dann wird Ihnen die Verschlüsselung nicht sehr helfen; Wenn die Anwendung die Anmeldeinformationen auf einem bestimmten Host entschlüsseln kann, kann der Host dazu verwendet werden, die Anmeldeinformationen ohne Ihr Eingreifen zu entschlüsseln (denken Sie an root
oder Administrator, wenn Sie sich den Quellcode ansehen und die Entschlüsselungsroutine so anpassen, dass sie verwendet werden kann) lies die Konfiguration). Dies ist noch mehr eine Möglichkeit, wenn Sie unverhüllten verwalteten Code (z. B. JVM oder .NET) oder eine Web-Skriptsprache verwenden, die sich im Klartext auf dem Server befindet (wie PHP).
Wie üblich, gibt es einen Kompromiss zwischen Sicherheit und Zugänglichkeit. Ich würde darüber nachdenken, gegen welche Bedrohungen Sie sich schützen möchten, und Sie sollten sich ein Mittel überlegen, um sich vor den Situationen zu schützen, die Sie brauchen. Wenn Sie mit Daten arbeiten, die sicher sein müssen, sollten Sie die Datenbank wahrscheinlich regelmäßig reaktivieren und Daten offline auf einen gesicherten und gut geschützten Datenbankserver verschieben, sobald dieser auf der Website veraltet ist. Dies würde Daten wie Sozialversicherungsnummern, Rechnungsinformationen usw. umfassen, auf die Bezug genommen werden kann. Dies würde auch bedeuten, dass Sie im Idealfall die Server in Ihrem eigenen Netzwerk steuern möchten, die Abrechnungsdienste oder sichere Datenspeicherung bieten.
Ich bevorzuge es, sie in einer separaten Konfigurationsdatei zu speichern, die sich außerhalb des Dokumentenstammverzeichnisses des Webservers befindet.
Dies schützt zwar nicht davor, dass ein Angreifer meinen Code so umstürzt, dass er dazu gezwungen werden kann, ihm das Passwort zu geben, aber er hat immer noch den Vorteil, dass er die Passwörter direkt in den Code (oder ein anderes Web) legt. zugängliche Datei), die Bedenken über eine Fehlkonfiguration des Webservers (oder Bug / Exploit) beseitigt, die es einem Angreifer ermöglicht, die passworthaltige Datei direkt herunterzuladen.
Ich schreibe dies für die Web-Service-App, die ein Passwort erhält, nicht den Client: Wenn Sie Hash-Passwörter im Quellcode speichern, kann sich jemand, der den Quellcode sieht, nicht selbst mit diesem Hash bedienen. Ihr Programm würde einfaches Passwort erhalten und es Hash-und vergleichen Sie beide Hashes. Aus diesem Grund speichern wir Hash-Passwörter in Datenbanken, nicht in Klartext. Weil sie nicht rückgängig gemacht werden können, wenn jemand zum Beispiel db stiehlt oder es für bösartige Zwecke ansieht, wird er nicht alle Benutzerkennwörter erhalten, nur die Hashes, die für ihn ziemlich nutzlos sind.
Hashing ist ein 1-Weg-Prozess: Es erzeugt den gleichen Wert aus der gleichen Quelle, aber Sie können den Quellwert nicht aus dem Hash berechnen.
Speichern auf dem Client: Wenn der Benutzer die Eingabe aufruft, speichert er sie in db / file im Klartext, vielleicht etwas verschleiern, aber nicht viel, um zu verhindern, dass jemand, der diesen Computer erwischt, dieses Passwort erhält.
Tags und Links security