Proyectos de código abierto: ¿qué hacer con los datos de configuration privada / secreta?

Estoy considerando abrir el código para un website mío en vivo en Github. Hasta este momento, he estado almacenando el código en un repository privado y mi única preocupación es que haya algunos files de configuration relacionados con mi entorno de producción (passwords de bases de datos, keys de API, etc.) que no deseo que sean. visible públicamente

¿Cuál es el enfoque típico para la contratación abierta de tales proyectos sin exponer datos privados? ¿Simplemente mantiene dos repositorys, uno público y uno privado idéntico con los datos privados añadidos, ocasionalmente fusionándose entre los dos?

En el caso de Git, recomiendo que agregue reglas a su .gitignore para ignorar los files que contienen información confidencial ( .hgignore para Mercurial). Trate de mantener la información confidencial en un lugar tanto como sea posible (por ejemplo, un file de configuration). Si trabajó con un marco web, esta información generalmente está en un file (por ejemplo, en Django, hay un file settings.py con información DB, key secreta, etc.) Si tiene información confidencial incrustada en varias partes de su aplicación , factor esa información en algún tipo de file de configuration u object.

Si desea que las personas aún sepan de dónde provienen los datos, incluya un ejemplo o un file ficticio con datos falsos con una anotación en algún lugar (ya sea en el file o en el file README) que deba modificarse. A continuación, podría nombrar el file, por ejemplo, settings.py.example e ignorar la settings.py

Mantener múltiples repos es una mala idea. Simplemente omita los datos confidenciales y asegúrese de que sea obvio que faltan y que faltan, para que las personas puedan reutilizar su trabajo.

Lógicamente, solo hay dos cosas que puedes hacer sin revelar tu información confidencial:

  1. No poner la información en VCS público en absoluto.
  2. Coloque la información en VCS de una manera criptográficamente segura.

Personalmente, no quisiera duplicar repositorys y si necesita implementarlo directamente desde VCS, entonces queda bastante con la opción 2. Obviamente, dependerá de su marco, pero en .NET, por ejemplo, estaría garantizando sus cadenas de connection y keys API están almacenadas en el web.config y luego están correctamente encriptadas (hablo de esto en la sección "Encriptar datos confidenciales de configuration" de OWASP Top 10 para desarrolladores de .NET parte 6: Configuración incorrecta de security ).

Con este enfoque, está poniendo la información requerida en el file de configuration para que se pueda ejecutar correctamente en la máquina donde se produjo el encryption pero no en otro lugar. Intente ejecutar la aplicación en otra máquina y se lanzará una exception debido a la diferencia en las teclas.