Comment chiffrer le mot de passe mysql en php (ou comment vaincre automatisé scanner de code à drapeau rouge)
De gestion de la frappe encore.
Comment dois-je satisfaire le scanner de code qui va lire ma source php et le drapeau rouge de mon MySQL chaîne de connexion?
- Serveur Linux (qui sera bientôt le Soleil)
- php 4.2 (bientôt dernière version)
- De base de données MySQL
- Serveurs en DMZ à l'extérieur du pare-feu
- Lecture seule compte MySQL
- Pas un seul octet d'informations non publiques dans la base de données
Je dois crypter mon mot de passe MySQL dans la chaîne de connexion pour aucune raison autre que cela va être interrompue au drapeau rouge automatique de test du code de la solution. La gestion est captivé par le concept de Pen-Testing sans la comprendre.
Je sais bien qu'il n'est pas plus en sécurité pour crypter le mot de passe dans le fichier avec toutes les autres mesures en place, mais mes sites seront prises vers le bas si je n'ai pas respecter. Je sais que ça fait mal les performances, mais ce site n'est pas populaire et n'est pas une énorme base de données axée application de toute façon.
Ma tentative:
//encrypt and decrypt are functions I stole wholesale off of the php.net manual
...
$SuperSecure[0] = array(encrypt("test"), encrypt("test")); //dev
...
$dbcnx = mysql_connect('localhost', decrypt($SuperSecure[0][0]), decrypt($SuperSecure[0][1]));
Est-il un meilleur moyen? Plus important encore, suis-je raté quelque chose et c'est vraiment nécessaire?
Edit: je ne peux pas combattre nationales. Si j'ignore la présente directive mon site vient jusqu'à perdre mon boulot c'est idiot. Je viens de le faire aussi facilement (et avec le moins d'impact sur les performances) que possible.
Ils n'ont pas roulé encore. Mon patron m'a dit que pour obtenir le code mis à jour avant l'exécution de l'analyseur
Dans ce cas, je ne serais pas "pleurer avant que ça fait mal 😉 Si vous ne savez pas à propos de le scanner (après tout il y a peut être sécurité stratégie impliquées, qui comprend plus d'un extrait de code) je pense que c'est une perte de temps de code autour de quelque chose que vous ne pouvez pas évaluer. Obtenir soit l'orientation/la documentation ou d'attendre les mauvaises choses de se produire.
Aussi, toute personne qui s'appuie sur web scanners à la place de manuel de révision du code de mérite ce genre de conneries dans leur site web.
OriginalL'auteur MrChrister | 2009-12-29
Vous devez vous connecter pour publier un commentaire.
Si vous ne voulez pas écrire le mot de passe directement dans
mysql_connect
, pourquoi ne pas écrire quelque chose comme:Sans savoir comment intelligent le scanner est en vous ne sera pas vraiment en mesure de dire ce que obsfucation est assez pour ne pas soulever les drapeaux.
Pour ma web services, j'écris un secrets.php ce n'est pas cochée dans le contrôle de version. Inclure que sur le déploiement et le mot de passe est défini, encore indisponible.
Attendre, donc cela passe aussi sécurisé avec le scanner (par opposition à la non-utilisation des variables)? Je vais prier pour vous, votre patron et son patron.
Je vous remercie pour vos prières. Mon enfer personnel continue avec web national de la réunion de l'équipe. La profondeur de leur dépravation connaît les limites de ma honte et continue à bosse moi en péril.
OriginalL'auteur Tomas Markauskas
Vous pouvez utiliser rot13 pour obscurcir (pas de chiffrement) le mot de passe
rot13 déplace simplement chaque caractère par 13 dans l'alphabet. rot13(rot13(originalstring)) retourne le originalstring. Je ne pense pas que la performance que vous lâche en raison d'un mécanisme de chiffrement seront mesurables.
OriginalL'auteur Otto Allmendinger
Ne pourrait-on pas définir la valeur par défaut de mysql hôte, nom d'utilisateur et mot de passe en php.fichier ini? Ensuite, la fonction mysql_connect ressemble:
Et à moins qu'un hacker a votre php.fichier ini, ils ne seront pas en mesure d'accéder le nom d'utilisateur ou mot de passe. Même si ils ont changé la fonction de
echo
. Sûr qu'ils le pouvaient écho les directives, mais je pense qu'il est assez obscure, comme le mot de passe n'a pas pu être trouvé dans les fichiers source, à côté de php.ini, qui est un serveur de fichier.Donné, si quelqu'un a fait une
phpinfo();
il serait également affiché dans la plaine du site, mais il fonctionne encore.Cette solution est très similaire à l'ODBC de la solution fournie par une autre réponse. Il a aussi le défaut que si le scanner vérifie votre php.le fichier ini, il va finir rouge de repérage de la place.
Si vous souhaitez faire plaisir en même temps, je te suggère de mettre au hasard des bribes de votre code de mysql dans les fichiers aléatoires qui sont tous compris avant vous devez vous connecter. AKA
Index.php
RandomFile.php
RandomFile2.php
RandomFile3.php
RandomFile4.php
Vous savez, il y a un expérimentales de la bibliothèque qui vous permettra de charger tout le code dans un bytecode format. Si vous laisser le scanneur scan, il ne serait probablement pas trouver le mot de passe.... là encore, il ne serait pas trouver quoi que ce soit.
OriginalL'auteur Tyler Carter
XOR! La base de la vénérable one-time-pad. Il est légitime de chiffrement, vous fait paraître plus suave puis rot13() et de la personne compétente doit être en mesure de le comprendre. Dans le même temps, personne ne sera grepping votre mot de passe.
Aaand soudain je déteste la façon dont PHP tableaux... Maintenant, prenez la sortie de l'...
La première partie est de chiffrement générateur, et la deuxième partie est ce que vous avez à mettre dans le programme. La seule règle est que tout ce qui bytestring vous XOR le mot de passe contre la devrait être de la même longueur que le mot de passe. Il ne sera probablement pas faire n'importe quoi non désirée si elle ne l'est pas, mais je n'ai pas envie de construire un cas de test.
OriginalL'auteur Jeff Ferland
Il EST inutile, car vous aurez juste coder le mot de passe. Toute personne qui a la source peut se connecter à la base de données depuis votre script PHP a savoir
decrypt
pour obtenir le mot de passe original.Exemple
disons que votre mot de passe est un nombre, par exemple
42
et queencrypt
est une fonction qui multiplie par deux etdecrypt
fait le contraire.Ensuite, vous allez stocker
84
dans le code quelque part. Toutefois, PHP a savoir ladecrypt
fonction et la convertit en42
d'abord avant de vous connecter à la base de données. Donc, depuis tout ce dont vous avez besoin est de se tenir dans le fichier PHP, il est inutile de dissimuler les informations nécessaires.Certains mal hacker qui a votre source peut toujours remplacer le
mysql_connect
dans votre exemple de code avec unecho
et obtenir le texte en clair le mot de passe...Facile de la dissimulation de l'
Peut-être qu'il suffit d'utiliser quelque chose comme
"t"."e"."s"."t"
au lieu de"test"
dans votre code pour contourner la détection du mot de passe...C'est pire que vous ne le supposez. Les chiffrer et de déchiffrer les fonctions sont à seulement 20 lignes à l'écart de la DatabaseConnection fonction. Si ils ont le fichier qu'ils ont tout ce qu'il faut. Nous n'avons pas à parler ici, puisque ce nouveau mandat offre la possibilité à aucun.
OriginalL'auteur Etan
Vous pouvez utiliser un ODBC connexion pour accéder à la base de données. L'ODBC de la couche d'abstraction stocke ses propriétés de connexion dans un fichier séparé (dans UnixODBC, c'est /etc/odbc.ini et ~/.odbc.ini). De cette façon, le système DSN peut savoir comment accéder à la base de données, le script va s'appuyer sur elle.
Je conseille la prudence dans l'utilisation d'ODBC, bien que, comme il n'a pas accès à certaines des fonctions plus complexes et les requêtes qu'un droit de connexion MySQL.
OriginalL'auteur amphetamachine
J'ai peut-être pas ici, mais laissez-moi vous poser cette.
Pourquoi n'êtes-vous pas le stockage de vos informations de connexion mysql dans une certaine forme de fichier de configuration, qui est inclus au moment de l'exécution, et d'utiliser une certaine forme d'abstraction de base de données, plutôt que de les émaillant votre code avec mysql_connects et d'autres méthodes traditionnelles de traiter avec les connexions de base de données?
Je pense qu'il serait douteux que votre code automatisée solution de numérisation permettrait de lire en clair les fichiers ini, xml ou les fichiers ini, et certains cadres, Comme Zend, il est très facile de traiter avec ces types de fichiers de configuration, de sorte que votre mot de passe n'est pas dispersés à travers votre code, ou accessible sur le web à tout moment...
Il semblerait que vous ayez toutes les autres mesures en place(en dehors du serveur de réseau, sécurisé compte mysql avec seulement les privs.). Suis-je misconstruing ce que vous faites, ou est-il une raison pour éviter de les meilleures pratiques ici?
Ce qui concerne
OriginalL'auteur JC.