8
votes

Troisième entreprise et problème de sécurité de la base de données

J'utilise le code suivant pour initialiser la connexion de base de données:

 public Connection getConnection() {
        try {
            if (null == connection) {
                String driverName = "com.mysql.jdbc.Driver"; // MySQL MM JDBC driver
                Class.forName(driverName);

                // Create a connection to the database
                String serverName = "localhost";
                String database = "database";
                String url = "jdbc:mysql://" + serverName + "/" + mydatabase; // a JDBC url
                String username = "username";
                String password = "password";
                connection = DriverManager.getConnection(url, username, password);
            }
            return connection;
        } catch (ClassNotFoundException cnfe) {
            cnfe.printStackTrace();
        } catch (SQLException sqle) {
            sqle.printStackTrace();
        }
        throw new NullPointerException("Cannot establish database connection...");
    }


0 commentaires

5 Réponses :


4
votes

Lisez le mot de passe à partir d'un fichier de propriétés ou d'un LDAP ou d'un accès similaire et sécurisé à ceux qui uniquement au compte utilisé pour exécuter le logiciel (selon lequel aucun des développeurs ne devrait avoir accès à).


3 commentaires

Pour être spécifique: N'utilisez pas de propriété système car l'option -D sera visible à toute personne qui peut répertorier les processus actifs sur la machine.


Quoi d'empêcher le développeur de rédiger un porte-backdoor? Dans ce cas, une vulnérabilité intentionnelle d'injection SQL.


@rook Le code peut être audit par les développeurs et les auditeurs de sécurité. Le problème n'est pas que des développeurs malveillants mais un développeur perdant une clé USB ou que son bureau soit compromis.



3
votes

Utilisez des fichiers simples pour stocker les propriétés de la base de données et lisez-les dans le code au lieu de codage papier. Non seulement cela est propre mais vous pouvez également restreindre l'accès des fichiers.

Ce lien peut vous aider.


2 commentaires

Si vous vous cryptez, où allez-vous mettre la clé?


@rook: Vous ne pouvez pas. Il n'ya aucun moyen de sauvegarder le mot de passe "Enregistrer" dans un fichier si vous devez le transmettre en texte clair sur le côté du serveur et que vous ne voulez pas qu'un utilisateur entrave une phrase de passe ou quelque chose. Vous ne pouvez que l'obscurcir. Si le serveur accepte cependant des mots de passe hachés, vous ne pouviez stocker que le hachage.



0
votes

Vous pouvez stocker le mot de passe dans un fichier de configuration, puis chiffrer les fichiers / sections du fichier à l'aide de DPAPI si vous utilisez Windows Box. De cette façon, vous n'aurez pas à vous soucier de la direction clé aussi.


0 commentaires

3
votes

Ce code crée une base de données Connectez-vous à l'aide d'un mot de passe codé et constant. .

Ce problème de sécurité se pose parce que, vous avez utilisé le nom, le nom d'utilisateur et le mot de passe de DB. Mais vous ne pouvez certainement pas résoudre le problème " Quelqu'un avec accès au code source ou au code compilé peut facilement apprendre le mot de passe ". Je parie que vous pouvez résoudre le premier problème.

Vous pouvez utiliser des propriétés pour inclure votre nom d'UESRName DB et votre mot de passe avec lequel vous pouvez encoder dans l'objet Propriétés à l'aide de SetProperty () .

Vous pouvez maintenant inclure l'objet de la propriété dans la méthode getconnection () : xxx


0 commentaires

2
votes

La grande majorité des applications Web utilisent un nom d'utilisateur / mot de passe codé dur pour leur connexion SQL. Vérification des informations d'identification de la production dans le contrôle de source ou donnez des stagiaires La possibilité de supprimer la base de données de production est généralement fronçée. Les informations d'identification de la production devraient être protégées et seuls les employés privilégiés devraient avoir accès à eux.

Il est courant que les applications Web sont courantes pour fuir leurs fichiers de configuration. Par exemple, si un fichier .xml est stocké dans le webroot, il est possible d'accéder à distance: http: //localhost/configs/db_config.xml . .

Il est courant de dissiper l'accès à votre base de données (bloc TCP Port 3306 pour MySQL). En fait, il s'agit d'une exigence des PCI-DSS. Même si le nom d'utilisateur et le mot de passe pour être obtenu, il serait inutile.


3 commentaires

C'est en fait un problème si vous avez plus d'un développeur de votre entreprise. Production Les mots de passe ne doivent pas être disponibles à tous les développeurs pour des environnements sécurisés. Le code source est généralement réparti sur plusieurs systèmes: SCM, CI, ordinateur de bureau, etc. Voir les autres réponses.


@ h3xstream absolument correct. Ce post est très vieux, pardonne-moi.


J'allais demander une édition .. et puis tu voyais que tu l'as déjà fait. +1