Ich bin noch nicht mit der Arbeitsweise von Git vertraut (und frage mich, ob jemand außer Linus ist;)).
Wenn Sie Heroku zum Hosten Ihrer Anwendung verwenden, müssen Sie Ihren Code in einem Git-Repo überprüfen lassen. Wenn Sie an einem Open-Source-Projekt arbeiten, werden Sie dieses Repo mit größerer Wahrscheinlichkeit auf Github oder anderen Git-Hosts freigeben.
Einige Dinge sollten nicht im öffentlichen Repo überprüft werden; Datenbankkennwörter, API-Schlüssel, Zertifikate usw. Diese Dinge müssen jedoch immer noch Teil des Git-Repos sein, da Sie damit Ihren Code an Heroku senden.
Wie arbeite ich mit diesem Anwendungsfall?
Hinweis: Ich weiß, dass Heroku oder PHPFog Servervariablen verwenden können, um dieses Problem zu umgehen. Meine Frage ist mehr darüber, wie man Teile des Codes "versteckt".
Antworten:
Die bevorzugte Methode, Passwörter / API-Schlüssel in Heroku geheim zu halten, besteht darin, Konfigurationswerte über die Heroku-Befehlszeilenanwendung festzulegen. Das folgende Beispiel stammt aus einem Artikel in der Heroku-Entwicklungsabteilung
(Das folgende Beispiel und meine gesamte Antwort beziehen sich auf Rails-Apps.)
Verweisen Sie dann mit der Variablen ENV [] auf diese Konfigurationswerte in Ihrem Code
Auf diese Weise werden Ihre sensiblen Passwörter nicht im Git-Repository gespeichert. (Hinweis: Wenn Sie die App lokal ausführen, legen Sie diese Werte in Ihrer
.bashrc
Datei festIch bin mir auch nicht sicher, welche Art von Anwendung Sie ausführen, aber in Rails verwendet heroku nicht Ihre database.yml-Datei, sondern legt einfach Ihren Datenbank-Benutzernamen / Ihr Kennwort gemäß Ihren App-Einstellungen fest. So können Sie vermeiden, diese Anmeldeinformationen in Git zu speichern
Wenn Sie eine eigene Anwendung ausführen und diese privat bleiben möchten, ist bitbucket eine großartige Alternative zu github, die kostenlose private Repositorys bietet.
quelle
Mehrere Ideen ... Die Kryptographie mit öffentlichen Schlüsseln ist die flexibelste Antwort.
Verschleierung (nur für Code)
Können Sie die Teile des Codes, die Sie ausblenden möchten, in ein anderes Projekt einfügen, kompilieren und nur den kompilierten Code und nicht den Quellcode einchecken? Dies ist keine Verschlüsselung und nicht zum Verschlüsseln von Passwörtern oder Schlüsseln geeignet. Die Leute können Ihren kompilierten Code immer noch zurückentwickeln, aber sie bekommen nicht die Quelle.
Privates GIT-Repository
Muss es ein öffentliches Git-Repository sein?
Serverspeicher
Können Sie diese Informationen in einer geschützten Datei im Home-Verzeichnis des Benutzerkontos speichern, unter dem die Anwendung ausgeführt wird? Ich würde die Vorgehensweise von ssh mit ~ / .ssh / id_rsa und einem chmod von 600 kopieren. Andernfalls könnte eine Umgebungsvariable verwendet werden. Sie müssen irgendwo auf dem Server einen Schlüssel speichern, sonst können Sie nichts schützen.
Symmetrische Kryptographie (nur für Sie)
Wenn Sie der einzige Entwickler sind, können Sie einen Schlüssel auf den Server legen und denselben Schlüssel auf Ihrem Computer haben und ein symmetrisches Verschlüsselungsschema verwenden, um einige Daten wie ein Kennwort oder ein Zertifikat zu schützen. Das Teilen eines symmetrischen Schlüssels mit Freunden wird chaotisch.
Asymmetrische Kryptographie (für mehrere Entwickler)
Wenn andere Entwickler geheime Dinge in ein öffentliches Git-Repository einchecken müssen, wurde für diese Art von Dingen eine Kryptografie mit öffentlichem Schlüssel / privatem Schlüssel (asymmetrisch) erstellt. Installieren Sie einen privaten Schlüssel auf Ihrem Server (checken Sie ihn nicht in die Quellcodeverwaltung ein!) Und generieren Sie daraus einen öffentlichen Schlüssel. Verschlüsseln Sie Ihre geheimen Daten mit dem öffentlichen Schlüssel des Servers. Nur der Server kann diese Daten mit seinem privaten Schlüssel entschlüsseln. Sie können den öffentlichen Schlüssel sogar in die Quellcodeverwaltung einchecken, sodass andere Personen Daten mit demselben öffentlichen Schlüssel verschlüsseln können und nur der Server sie entschlüsseln kann.
Werkzeug
Openssl ist wahrscheinlich das einzige Kryptografietool, das Sie jemals benötigen werden. Schreiben Sie nicht Ihren eigenen Kryptografiealgorithmus oder Ihre eigene Implementierung eines veröffentlichten Algorithmus.
Gedanken schließen
Wenn der "Server" ein Webserver ist, der https verwendet, sollten Sie bereits einen sicheren Schlüsselspeicher auf dem Server haben, in dem der private Schlüssel gespeichert wird diese. Vielleicht haben sie ein paar Tipps, wie andere die Herausforderung lösen, vor der Sie stehen?
quelle
Wenn du deinen Code auf Heroku ausführen willst, musst du ihn ihnen geben - du kannst ihn nicht vor deinem Hosting-Provider "geheim" halten.
In Bezug auf öffentliche Git-Repositorys müssten Sie zum Zweck der Bereitstellung einen privaten Zweig Ihres Projekts pflegen, wenn Ihr Projekt Open Source ist, Sie jedoch keine Hosting-Details freigeben möchten.
quelle
Sie sollten keine Teile des Codes verstecken. Die Sicherheit Ihres Systems sollte nicht von der Geheimhaltung des Codes abhängen. Das ist als "Sicherheit durch Dunkelheit" bekannt, was von Sicherheitsexperten verpönt wird, weil es sehr schlecht funktioniert.
Stattdessen sollten Passwörter, Kryptoschlüssel usw. vom Code getrennt werden. Speichern Sie sie in einer separaten Konfigurationsdatei oder einem separaten Konfigurationswert, der vom Code gelesen wird. Sie müssen sie nicht in Git aufbewahren.
Wichtig: Codieren Sie niemals kryptografische Schlüssel, Passwörter oder andere Geheimnisse in Ihrem Quellcode fest! Das ist eine sehr schlechte Praxis.
Siehe auch:
Wie gehen Open Source-Projekte mit sicheren Artefakten um?
Passwort in der Datei .php
Standards für die Verschlüsselung von Passwörtern in Konfigurationsdateien?
Open Source und wie funktioniert es bei sicheren Projekten?
So schützen Sie FTP-Kontoinformationen im Quellcode eines Programms
Ist es eine sichere Möglichkeit, DB-Parameter in htaccess und nicht in einer PHP-Datei zu deklarieren?
Plug: IT Security.SE ist ein großartiger Ort, um Fragen zur Sicherheit zu stellen!
quelle