Todavía no estoy acostumbrado a la forma en que funciona Git (y me pregunto si alguien además de Linus lo está)).
Si usa Heroku para alojar su aplicación, debe tener su código verificado en un repositorio de Git. Si trabaja en un proyecto de código abierto, es más probable que comparta este repositorio en Github u otros hosts Git.
Algunas cosas no deben verificarse en el repositorio público; contraseñas de bases de datos, claves API, certificados, etc. Pero estas cosas aún deben ser parte del repositorio de Git, ya que lo usa para enviar su código a Heroku.
¿Cómo trabajar con este caso de uso?
Nota: Sé que Heroku o PHPFog pueden usar variables de servidor para sortear este problema. Mi pregunta es más acerca de cómo "ocultar" partes del código.
Respuestas:
El método preferido para mantener en secreto las contraseñas / claves api en heroku es establecer los valores de configuración a través de la aplicación de línea de comandos heroku. El siguiente ejemplo tomado de un artículo del centro de desarrollo de heroku
(El siguiente ejemplo, y toda mi respuesta se refieren a aplicaciones de rieles)
Luego, haga referencia a estos valores de configuración en su código utilizando la variable ENV []
De esta manera, sus contraseñas confidenciales no se almacenan en el repositorio de git. (Nota: cuando ejecute la aplicación localmente, establezca estos valores en su
.bashrc
archivoAdemás, no estoy seguro de qué tipo de aplicación está ejecutando, pero en Rails, heroku no usa su archivo database.yml, simplemente establece su nombre de usuario / contraseña de la base de datos de acuerdo con la configuración de su aplicación. Para que pueda evitar guardar esas credenciales en git
Además, también, si está ejecutando su propia aplicación y desea que permanezca privada, una gran alternativa a github es Bitbucket, que ofrece repositorios privados gratuitos.
fuente
Varias ideas ... La criptografía de clave pública es la respuesta más flexible.
Ofuscación (solo para código)
Para las partes del código que desea ocultar, ¿podría ponerlas en un proyecto diferente, compilarlas y registrar solo el código compilado, no la fuente? Esto no es cifrado y no es adecuado para cifrar contraseñas o claves. La gente aún puede aplicar ingeniería inversa a su código compilado, pero no obtienen la fuente.
Repositorio privado de GIT
¿Tiene que ser un repositorio público de git?
Almacenamiento del servidor
¿Puede almacenar esta información en un archivo protegido en el directorio de inicio de la cuenta de usuario con la que se ejecuta la aplicación? Copiaría la forma en que ssh hace esto con ~ / .ssh / id_rsa y un chmod de 600. De lo contrario, podría usarse una variable de entorno. Necesita algún lugar en el servidor para almacenar algún tipo de clave, o no hay forma de proteger nada.
Criptografía simétrica (solo para ti)
Si usted es el único desarrollador, puede poner una clave en el servidor y tener esa misma clave en su máquina y usar un esquema de cifrado simétrico para proteger algunos datos, como una contraseña o un certificado. Compartir una clave simétrica con amigos se vuelve complicado.
Criptografía asimétrica (para múltiples desarrolladores)
Si otros desarrolladores necesitan verificar cosas secretas en un repositorio público de git, se realizó una criptografía de clave pública / clave privada (asimétrica) para este tipo de cosas. Instale una clave privada en su servidor (¡no la controle en el control de origen!) Y genere una clave pública a partir de ella. Cifre sus datos secretos con la clave pública del servidor. Solo el servidor puede descifrar esos datos utilizando su clave privada. Incluso puede verificar la clave pública en el control de origen para que otras personas puedan cifrar datos utilizando la misma clave pública y solo el servidor pueda descifrarla.
Herramienta
Openssl es probablemente la única herramienta de criptografía que necesitará. No escriba su propio algoritmo de criptografía o su propia implementación de un algoritmo publicado.
Pensamientos finales
Si el "servidor" es un servidor web que usa https, entonces ya debería tener un almacén de claves seguro de algún tipo en el servidor para almacenar la clave privada. Es una especie de alucinante que una empresa de hosting no tenga en cuenta esta. ¿Tal vez tienen algunas pistas sobre cómo otros resuelven el desafío que enfrenta?
fuente
Si desea ejecutar su código en Heroku, debe dárselos; no puede mantenerlo "secreto" de su proveedor de alojamiento.
En lo que respecta a los repositorios públicos de git, si su proyecto es de código abierto pero no desea compartir detalles de alojamiento, necesitaría mantener una bifurcación privada de su proyecto para fines de implementación.
fuente
No deberías estar ocultando partes del código. La seguridad de su sistema no debe depender del secreto del código; eso se conoce como "seguridad a través de la oscuridad", que es mal visto por los expertos en seguridad porque funciona muy mal.
En cambio, las contraseñas, las claves criptográficas, etc. deben mantenerse separadas del código. Almacénelos en un archivo de configuración o valor de configuración separado que lea el código. No es necesario almacenarlos en git.
Importante: ¡ Nunca codifique claves criptográficas, contraseñas u otros secretos en su código fuente! Esa es una muy mala práctica.
Ver también:
¿Cómo manejan los proyectos de código abierto los artefactos seguros?
Contraseña en el archivo .php
¿Estándares para encriptar contraseñas en archivos de configuración?
¿Código abierto y cómo funciona para proyectos seguros?
Cómo proteger la información de la cuenta ftp en el código fuente de un programa
¿Es una forma segura de declarar parámetros DB en htaccess en lugar de en un archivo PHP?
Plug: IT Security.SE es un excelente lugar para hacer preguntas sobre seguridad.
fuente