2011-10-02 18 views
5

Estoy desarrollando una pequeña aplicación web en python que interactuará con la cuenta de Dropbox de un usuario. ¿Cuál es la mejor manera de almacenar los tokens Oauth para esa cuenta en un archivo plano?Almacenar de forma segura el (los) token (s) de Oauth en el archivo

¿Hashing the tokens suficientemente seguro? ¿O debería encriptarlos? Si encriptarlos es el camino a seguir, ¿cómo sugeriría que se guarde la clave, ya que sería necesario un cifrado bidireccional para descifrar los tokens para enviarlos a Dropbox?

Podría cargar sqlite y almacenar los tokens allí, pero me pregunto si hay una buena manera de hacerlo con archivos planos. El mismo problema se produce con Sqlite, ya que también es un archivo. Por supuesto, los permisos de archivo solo se establecerán en el privilegio menos permisible al que accederá la aplicación web.

+0

Hashing es generalmente de una sola manera. ¿Su plataforma tiene una instalación de llavero? – jman

+0

Tenga en cuenta que SQLite también usa un archivo para la base de datos, y es trivial obtener datos de él. Por lo tanto, no agregará ninguna seguridad sobre los archivos planos. –

Respuesta

3

Hashing no funcionará, ya que, como menciona skjaidev, es de una sola manera.

Si tiene un temor razonable de que su archivo o base de datos sea robado (*), la encriptación es el camino a seguir. Pero, de hecho, como mencionas, tu aplicación necesitará la clave de descifrado, por lo que la pregunta es dónde almacenarla. Obviamente almacenarlo en el mismo lugar que los datos, no mejora la seguridad. Tenga en cuenta lo siguiente:

  • Cuando sus datos se encuentran en una base de datos, es (lo más probable) menos seguro que en un archivo plano. Esto se debe a que existen técnicas de inyección de base de datos que pueden permitirle leer la base de datos, pero no los archivos. En este caso, tiene sentido poner su clave de descifrado en algún lugar del sistema de archivos (en su código): en ese caso, los datos de la base de datos son inútiles.
  • Incluso cuando sus datos están en un archivo plano, colocar la clave de descifrado en algún lugar de un archivo puede reducir el riesgo. Muchos sistemas se "piratean" cuando el pirata informático obtiene acceso a un sistema que ni siquiera se suponía que debía contener esos datos, que contenía copias de seguridad antiguas de los datos o, de alguna otra forma, no (necesariamente) contiene su código con el descifrado. llave.
  • Lo mejor es tener su clave de descifrado en absoluto en el sistema de archivos, sino solo en la memoria de la computadora. Un buen hacker con acceso raíz o acceso físico aún puede llegar a él, pero yo diría que en el 99% de los casos en que los piratas informáticos tienen acceso a los sistemas de archivos, tampoco podrán leer la memoria (en el casos en los que roban copias de seguridad, roban la máquina física (apagándola en el proceso), obtienen acceso a nivel de usuario, etc.). Este es básicamente el enfoque de llavero. El problema es cómo obtener la clave de descifrado en la memoria, y solo hay una solución que conozco: escribirla (o alguna otra contraseña que descifre la clave de descifrado) cada vez que se inicia la aplicación. Si esto es aceptable depende de la frecuencia con la que se reiniciará la aplicación.

  • Hay otro método. Si solo necesita acceso a Dropbox cuando los usuarios realmente inician sesión en su aplicación, puede considerar encriptar el token con alguna propiedad de usuario única (o instancia, la contraseña que usa el usuario para iniciar sesión en su sitio, o alguna cadena aleatoria que poner en una cookie en la primera visita). En este caso, también puede considerar almacenar el token de acceso completo cifrado en una cookie (y no en su servidor en absoluto).

Cualquiera que sea el método que elija, nunca lo protegerá realmente, como usted mismo menciona. Si su aplicación puede obtener tokens descifrados (que puede, de lo contrario su aplicación no necesitaría almacenarlos en primer lugar), también puede hacerlo un hacker con privilegios ilimitados. Sin embargo, lo bueno de los tokens de acceso es que probablemente se puedan revocar fácilmente, por lo que si se los roban probablemente no sea el fin del mundo; y un hacker sabe que pueden ser fácilmente revocados, por lo que difícilmente serán interesantes como objetivo.

(*) Nota: siempre es razonable suponer que las cosas serán robadas de una forma u otra. Sin embargo, puedo imaginar que si configura un sitio pequeño para 20 amigos en la PC de su hogar, se preocupa menos por el robo de sus contraseñas que cuando está construyendo la siguiente instagram. Siempre es una compensación entre la seguridad y la cantidad de trabajo. Como se mencionó, tener sus tokens en un archivo plano en lugar de una base de datos (si se maneja correctamente) debería hacer que sea menos probable que sean robados.

Cuestiones relacionadas