2009-12-02 2 views
1

Tout d'abord, je réalise qu'il n'existe pas de solution parfaitement sécurisée (et même s'il y en avait, sa facilité d'utilisation serait de la merde). Cela dit, comment protégez-vous votre base de données MySQL d'être compromise par quelqu'un qui télécharge votre code et s'en empare? Basé sur mon expérience avec PHP, il semble obligatoire de le stocker dans le code à un moment ou un autre, ce qui envoie des drapeaux pour moi. Je peux voir où refactoring pour obscurcir variable, constante, et les noms de fonction (définis par l'utilisateur) pourrait être bénéfique, mais à la fin, il serait toujours possible de le parcourir et de trouver le fichier avec les informations de connexion DB.Stockage sécurisé (r) des informations de connexion MySQL?

Des idées?

Répondre

4

Habituellement, les informations d'authentification MySQL sont stockées dans un fichier de configuration externe. L'utilisateur MySQL utilisé par l'application Web reçoit des autorisations limitées telles que SELECT, INSERT, UPDATE, DELETE et ne dispose pas d'autorisations telles que ALTER, DROP, DELETE. Si vous souhaitez publier le code au public, vous ne devez pas inclure votre fichier de configuration privé, mais plutôt un fichier de configuration générique/instructional/minimal.

Le stockage des informations d'authentification MySQL dans un format chiffré est un peu stupide, car vous devez également stocker localement la clé privée/le chiffrement. S'il est trivial pour un utilisateur non authentifié d'afficher le code ou les fichiers de configuration sur votre serveur, le problème n'est pas le code - c'est la configuration du serveur & config.

1

La sécurité peut être facilitée en stockant toutes les informations codées en dur (dans les fichiers de configuration ou les scripts) en dehors de la racine Web et en supprimant (sur le code de production) les messages d'erreur. De cette façon, nous espérons que vos utilisateurs ne verront pas cela userValidate() expects exactly three paramaters.

1

pygorex1 est correct, vous devez utiliser des fichiers de configuration externes où "externe" signifie un fichier en dehors de la racine Web. Donc, même s'il y avait une erreur de configuration dans votre serveur Web qui permettrait à l'utilisateur de voir votre code source, ils ne pourraient pas voir les informations d'identification de la base de données puisqu'ils ne peuvent pas être accédés directement via le navigateur.

pygorex1 est aussi juste sur les permissions de l'utilisateur. Limiter l'accès de l'utilisateur mysql à un minimum est toujours préférable. Même si un pirate obtient le mot de passe et le nom d'utilisateur de votre mysql, il ne pourra pas faire de dégâts importants si les permissions de l'utilisateur ne sont limitées qu'à des requêtes SELECT par exemple. Une chose qu'il a oublié de mentionner était que l'utilisateur mysql ne devrait être autorisé à se connecter qu'à partir de localhost (ou à partir de n'importe quel hôte sur lequel l'application Web est active), n'utilisez jamais de caractères génériques dans les hôtes autorisés.

Questions connexes