Zunächst der nicht sicherheitsrelevante Grund:
Workflow zur Kennwortänderung
Kennwörter ändern sich unabhängig von einem Softwareanwendungscode. Wenn ein DBA ein Datenbankkennwort ändert, ist es für Entwickler sinnvoll, den Code zu aktualisieren, einen neuen Build und eine neue Version für die Produktion zu erhalten und zu versuchen, alles zeitlich zu steuern? Kennwörter sind ein Laufzeitkonfigurationsartefakt und kein Entwicklungsartefakt. Sie sollten über Konfigurationsdateien, Umgebungsvariablen oder das von Ihnen verwendete Konfigurationsparadigma eingefügt werden.
Autorisierungsbereich
Im Allgemeinen bieten Versionskontrollsysteme eine Autorisierungskontrolle Daher können nur autorisierte Benutzer darauf zugreifen. Innerhalb eines Repositorys sind Berechtigungen jedoch im Allgemeinen entweder schreibgeschützt oder schreibgeschützt oder möglicherweise ein Schnickschnack, wie er von GitHub bereitgestellt wird. Es ist unwahrscheinlich, dass Sie Sicherheitsbeschränkungen finden, mit denen Entwickler Quellcode abrufen können, jedoch keine Kennwörter. Wenn Sie ein Repo klonen können, können Sie ein Repo klonen. Zeitraum. In vielen Umgebungen haben Entwickler keinen vollständigen Zugriff auf die Produktion. Manchmal haben sie schreibgeschützten Zugriff auf Produktionsdatenbanken, manchmal keinen Zugriff. Was ist, wenn Entwickler im Allgemeinen Zugriff haben, Sie aber nicht möchten, dass alle Praktikanten, Neueinstellungen usw. Zugriff haben?
Umgebungen
Was ist, wenn Sie mehrere Umgebungen haben, z. B. eine Entwicklungsumgebung, eine QS-Umgebung, Staging und Produktion? Würden Sie alle ihre Passwörter in der Versionskontrolle speichern? Wie würde die App wissen, welche zu verwenden ist? Die App müsste eine Möglichkeit haben, die Umgebung zu kennen, was letztendlich eine Konfigurationseinstellung sein würde. Wenn Sie den Umgebungsnamen als Konfigurationseinstellung festlegen können, können Sie das Datenbankkennwort als Konfigurationseinstellung festlegen (zusammen mit der Verbindungszeichenfolge, dem Benutzernamen usw.).
Verlauf
Wie bereits erwähnt, dient die Versionskontrolle dazu, den Verlauf zu erhalten. Ältere Passwörter können also weiterhin abgerufen werden, was möglicherweise nicht das Beste ist.
Kompromiss
Wie oft haben wir in den Nachrichten Schlagzeilen über Quellcode für ein Produkt gesehen, das in die Welt gelangt ist? Der Quellcode ist alles, was in der Versionskontrolle enthalten ist. Dies ist wahrscheinlich der Hauptgrund, Passwörter nicht in die Versionskontrolle aufzunehmen!
Allerdings ...
Allerdings müssen Passwörter gespeichert werden irgendwo . Die oben genannten Bedenken deuten nicht unbedingt darauf hin, dass sie überhaupt nicht in der Versionskontrolle gespeichert werden sollten, sondern dass sie in der Versionskontrolle nicht im Quellcode-Repository des Produkts gespeichert werden sollten. Ein separates Repo für Konfigurationsverwaltung, Operationen usw. ist sehr vernünftig. Der Schlüssel besteht darin, Vorgänge von der Entwicklung zu trennen, wenn es um Sicherheitsanmeldeinformationen geht, und nicht unbedingt die Versionskontrolle insgesamt zu vermeiden.
Außerdem habe ich in Umgebungen außerhalb der Produktion Kennwörter und API-Schlüssel für externe Systeme in gespeichert Konfigurationsdateien im Produktquellcode als Standard. Warum? Um es schmerzlos zu machen, wenn ein Entwickler den Code auscheckt, kann er ihn einfach erstellen und ausführen und muss keine zusätzlichen Konfigurationsdateien abrufen. Dies sind Anmeldeinformationen, die sich selten ändern und zu keinen Geschäftsgeheimnissen führen. Aber ich würde dies niemals mit Produktionsgeheimnissen tun.
Das Endergebnis ist also ... es kommt darauf an.