Para comenzar: estoy de acuerdo con usted en que la pieza de William Brandl se inclina más hacia la conveniencia que hacia la seguridad. Incluso podría ir tan lejos como para decir que está equivocado cuando dice que almacenar las credenciales en un archivo es la única manera de hacerlo. Al menos cuando deja fuera alguna parte con respecto al cifrado. El enlace que proporciona al artículo de CWE-259 dice específicamente que:
La información de nombre de usuario y contraseña no debe incluirse en un archivo de configuración o en un archivo de propiedades en texto sin formato ya que esto permitirá que cualquiera que pueda leer el archivo acceda al recurso. Si es posible, cifre esta información y evite CWE-260 y CWE-13 .
El hecho es que, independientemente de lo que haya decidido hacer, un atacante con acceso a sus archivos podrá robar sus credenciales.
Ya que está ejecutando el servidor con un usuario con pocos privilegios, con acceso restringido y una contraseña segura, generalmente está bastante seguro. Siempre que bloquee a todos los usuarios, otorgue a su usuario de la base de datos solo los privilegios mínimos requeridos, etc. probablemente no tendrá ningún problema.
Archivo separado
Es posible que desee considerar almacenar las credenciales en un archivo separado, solo para su propia conveniencia. Esto se debe a que puede intercambiar nuevas credenciales fácilmente si alguna vez decide cambiar la base de datos. De esta manera, no tienes que volver a compilar tu fuente.
También puede cifrar las credenciales almacenadas en ese archivo separado. Esto requerirá que su código descifre la clave, sin embargo, lo que significa que la clave de descifrado está en los archivos compilados de Java. Esto es realmente solo seguridad a través de la oscuridad (por ejemplo, una falsa sensación de seguridad), y honestamente no agrega mucho. Sin embargo, aumentará un poco la dificultad, en lugar de solo un nombre de usuario y contraseña de texto simple.
Inicio
Lo único que puedo sugerir para hacerlo más seguro, evitando la codificación y el almacenamiento de las credenciales en un archivo separado, es proporcionar las credenciales en el inicio. Esto será más engorroso desde una perspectiva técnica (por ejemplo, tendrá que reiniciar el servidor manualmente cada vez que se caiga), pero al menos eliminará todos los problemas relacionados con dónde almacenar las credenciales.
Sin embargo, las credenciales se se almacenarán en la memoria. Entonces, si un atacante realmente quiere obtener las credenciales, un volcado de memoria podría ser todo lo que necesite, independientemente de dónde almacene las credenciales.
Resumen
Digo, para su propia conveniencia, almacene las credenciales en un archivo, pero no tenga miedo si quiere mantener las credenciales en el código fuente. (Solo tenga cuidado con los programadores que revisan su código, ya que es una mala práctica ;-)). Una vez más, asegúrese de supervisar su servidor, asegúrese de aplicar una política de privilegios mínimos en sus usuarios y servicios, y asegúrese de que todas las credenciales sean únicas y sólidas.
Nota:
Para futuros lectores; Esto no quiere decir que no deba preocuparse por la forma en que realiza la gestión de credenciales. Una gran cantidad de marcos e idiomas proporcionan formas de cifrar y asegurar sus credenciales, y siempre se recomienda seguir las mejores prácticas. Pero el hecho del asunto es que si alguien tiene acceso a sus archivos, generalmente no tiene suerte. ¡Así que protege tus archivos!