¿Debe un sitio web de código cerrado mantener una clave secreta en su fuente?

6

Varias API (como Facebook o Amazon S3) requieren una clave secreta para autenticar el acceso al servicio. Obviamente, si el código fuente es público, ¡la clave no debe estar en la fuente! ¿Qué pasa con un sitio web de código cerrado?

    
pregunta Casebash 30.09.2011 - 09:17
fuente

5 respuestas

9

Mi práctica recomendada es no poner claves en el código fuente. La mejor opción para su situación particular depende de algunos de los detalles.

En general, la preferencia es mantener la clave en un archivo separado que no esté almacenado en el repositorio de código fuente. Incluso puede tener un directorio secrets si lo desea y almacenar las claves allí. Por lo general, usted entrega las claves a los usuarios apropiados, aquellos que necesitan realizar compilaciones finales o compilaciones que puedan probar la funcionalidad que requiere la clave.

Si tiene personas que trabajan con su código fuente que no son completamente confiables con las claves (por ejemplo, si los programadores subcontratados agregan a su código), puede manipular el código para que funcione en modo de respaldo si no tiene los secretos. Esto puede o no ser apropiado para su situación.

Debería señalar que realmente no hay una buena manera de mantener la clave en secreto si distribuye el código objeto. Este método realmente solo debe usarse en programas que no son solo de código cerrado sino de distribución cerrada. Si tiene que hacer alguna ofuscación, no solo la clave sino el ofuscador debe estar en el directorio secrets y su distribución está restringida.

    
respondido por el David Schwartz 30.09.2011 - 13:47
fuente
6

El ciclo de vida del código fuente y la administración de claves pueden entrar en conflicto. Por ejemplo, puede (debería) usar una herramienta de control de versiones como Subversion para almacenar las modificaciones sucesivas que realice en el código fuente; Si coloca la clave secreta en eso, entonces la clave también se almacenará. Básicamente, si almacena la clave en el código fuente del sitio web, entonces necesita hacer que el código fuente sea tan secreto como la clave; una clave es pequeña y, como tal, se considera más fácil de mantener en secreto (por ejemplo, es posible escribir una clave en un papel y guardar el papel en una caja fuerte, ya que se puede escribir de nuevo en unos segundos), mientras que la fuente El código para todo un sitio es mucho más engorroso. Si almacena la clave en el código fuente, entonces, de repente, obtener una copia del código fuente del sitio web se convierte en un objetivo muy valioso para los atacantes.

    
respondido por el Thomas Pornin 03.10.2011 - 13:41
fuente
4

Si con "en el código fuente" quiere decir como parte del código lógico en un archivo, estaría de acuerdo con los demás: No lo haga. Hablando para PHP, entonces partes de su código pueden mostrarse en los informes de depuración, posiblemente incluso en el sitio web (al menos en la vista de desarrollo).

Las otras dos opciones son - un archivo de configuración dedicado en el lenguaje de programación que está utilizando para el proyecto. Luego, puede incluirlo donde lo necesite o, mejor, utilizar algo como el patrón de diseño del Registro. La ventaja es que el archivo se interpreta cuando se lo llama directamente y no genera los secretos. - un archivo conif de texto plano dedicado. Esto debe protegerse de las llamadas directas, por ejemplo, colocándolo fuera del DocumentRoot.

Principalmente, me voy con este último y generalmente solo coloco un controlador de interfaz en DocRoot y dejo todas las librerías, configuraciones, la mayoría de los datos, etc. paralelas a eso.

    
respondido por el mcandril 30.09.2011 - 14:21
fuente
2

La primera respuesta que apareció en mi cabeza es NO, no es una práctica correcta.

Sin embargo, a veces se supone que las personas deben seguir prácticas que no son del todo perfectas pero que se requieren para el lanzamiento anticipado, el requisito de cliente cerrado o algún otro elemento de miSf (H).

Por lo tanto, si en tales situaciones, trate de tener en cuenta algunos puntos como:

  • NO como PLATAFORMA más importante

    • codifícalo, salmelo ..... haz lo que puedas
  • No lo incorpores en el código fuente en todas partes

    • haga un archivo de configuración con su detalle y léalo

    • asigne el permiso del archivo de configuración para que sea "solo lectura" y solo lo requiere el usuario

respondido por el AbhishekKr 30.09.2011 - 10:25
fuente
1

Depende. ¿Quién tiene acceso a las fuentes / binarios? Si puede asegurar el acceso a las fuentes lo suficiente, no hay mucho de malo en tener la clave en las fuentes desde una perspectiva de seguridad. Yo sigo desaconsejándolo. En primer lugar, este enfoque disminuye la capacidad de mantenimiento y, en segundo lugar, puede tener almacenes de claves específicos del usuario en la mayoría de los sistemas que le permiten leer dichas claves desde contenedores criptográficos. De esa manera, puede asegurar el acceso a esas claves aún más y solo ciertos usuarios o grupos pueden recuperarlas.

Pero si alguien experto lanza un ataque dedicado y tiene acceso de raíz o incluso acceso físico a la máquina, podrá recuperar la contraseña tarde o temprano. Entonces, algunas personas comenzaron a cifrar dichas rutinas con una clave que debe obtenerse de un lugar diferente durante el inicio / ejecución de la aplicación. Esto puede introducir una segunda línea de defensa, ya que puede denegar el acceso a aplicaciones que no son de confianza desde una ubicación diferente. Pero para la mayoría de las aplicaciones, considero que una exageración.

    
respondido por el Falcon 30.09.2011 - 10:01
fuente

Lea otras preguntas en las etiquetas