Comment puis-je avoir un mot de passe à l'intérieur du code PHP et garantir que personne ne visualisant la page dans le navigateur peut le récupérer? P>
est: php $ mot de passe = "mot de passe"?> code> assez? Y a-t-il une meilleure façon plus sûre de faire cela? P>
11 Réponses :
Stockez le mot de passe crypté. Par exemple, prenez la sortie de: ... et mettez-la dans votre code. Encore mieux, mettez-le dans votre base de données ou dans un fichier en dehors de l'arborescence de répertoire du serveur Web. P> p>
Mettre les mots de passe de base de données dans la base de données appelle à certains ... Problèmes intéressants :-)
+1 Ceci est la seule solution sane! Honte sur tous les autres (c'est-à-dire PHP sera analysé, alors on peut voir vos mots de passe: -S)
Sha est pas i> un cryptage. C'est un algorithme de hachage.
Comment cela aide-t-il? On suppose que le mot de passe permet d'accéder à une ressource sécurisée. Si le hachage suffit à accéder à cette ressource, comment stocker le hachage de plus en sécurité que de stocker le mot de passe brut - les deux permettront à l'accès?
Assurez-vous d'utiliser du sel: SHA1 peut être cassé à l'aide d'une table arc-en-ciel relativement facilement.
La plupart du temps, vous souhaitez stocker des mots de passe dans votre code, ils sont destinés à être connectés à des ressources telles que des bases de données, et je n'ai jamais vu une base de données accepter un mot de passe haché pour une connexion avant ...
Votre code PHP (erreurs de configuration de la barrage) doit être traité sur le serveur. Rien à l'intérieur du Edit: Le point sur les stocker dans un fichier en dehors de la racine de document pour éviter toute exposition si votre configuration PHP est certainement valide. Lorsque j'ai utilisé PHP, j'ai conservé un fichier Config.Indic en dehors de HTDOCS qui était Php?>; Code> Les blocs seront jamais visibles sur le navigateur. Vous devez vous assurer que votre serveur de déploiement n'affichera pas les erreurs de syntaxe au client - c'est-à-dire que la déclaration d'erreur est définie sur quelque chose qui ne comprenait pas E_PARSE, de peur d'une modification hâtive de code en direct (admettre cela, nous les faisons tous :) Fuites de certaines informations. < / p>
exiger code> D au moment de l'exécution et des variables spécifiques à la configuration exportées (c'est-à-dire des mots de passe). P>
Ce n'est pas une bonne solution. Et que se passe-t-il si vous travaillez dans une équipe, dans lequel tout le monde a accès au Sourcecode. non non Non! hachage est la voie à suivre
Comment l'aide de hachage? Si le hachage suffit à se connecter à la ressource "sécurisée", comment stocker le hachage plus sécurisé que de stocker le mot de passe?
Habituellement, il y a deux scénarios. voir Ma réponse , il parle à la fois
Quel type de projet est-ce là où certains membres de l'équipe n'ont pas accès à l'administrateur à leur propre système?
... et si une telle équipe existe - un où vous ne pouvez pas faire confiance à l'un d'entre eux avec un mot de passe - vous devriez vraiment reconsidérer de travailler avec eux en premier lieu.
Mais vous ne donneriez pas de mot de passe de votre lieu de travail à tout le monde de votre équipe, ai-je raison? mieux sûr que désolé
BASIC, probablement pas 100% étanche mais suffisamment à des fins générales: p>
HASH Le mot de passe (utilisez du sel pour une sécurité supplémentaire) en utilisant votre algorithme préféré et stockez le hachage (et le sel). Comparez les entrées Salées et hachées avec des données stockées pour vérifier un mot de passe. P>
Il y a des moyens noumants de faire cela. Cependant, les gens ne seront pas en mesure d'afficher le mot de passe que vous avez enregistré (en tant que texte brut) dans un fichier PHP, car PHP est une langue latérale de serveur, ce qui signifie que, tant que vous ne l'imprimez pas au navigateur, il sera rester invisible. p>
Donc c'est "sûr". P>
Les blocs de code PHP ne peuvent pas être récupérés par des clients à moins qu'ils ne produisent quelque chose. Observez:
<?php if($password=="abcd") echo "OK"; else echo "Wrong."; ?>
Sauf si vous désinstallez accidentellement PHP et Apache commence à le servir en tant que texte brut, c'est-à-dire. Vu que cela se produise quelques fois!
Il y a aussi la manière omniprésente d'arriver à faire des contenus de fichiers en mettant des choses comme ../../../../../c / passwd code> quelque part dans l'URL :-). Mais accordé, cela fonctionne chaque fois que vous ne faites pas attention à ce que l'utilisateur entre et que vous avez quelque chose de sensible stocké dans un fichier.
Le meilleur moyen est de stocker le mot de passe au-dessus de votre répertoire racine. Si vous décidez d'avoir un mot de passe dans le fichier PHP, aucun organisme ne pouvait afficher car les fichiers PHP sont excusés sur le serveur. Mais si le serveur ne prend pas en charge PHP, ces fichiers seront livrés sous forme de fichiers texte et tout le mot de passe peut voir le mot de passe. P>
Et où stockez-vous le mot de passe de la base de données?
Dossier / répertoire au-dessus du répertoire racine, de sorte que personne ne puisse y accéder directement dans le navigateur.
Alors, quelle est votre réponse? Stockez le mot de passe dans la base de données ou rangez-le dans un fichier au-dessus de la racine du document?
Changé, mais je pensais qu'il demandait au mot de passe de l'utilisateur, pas le mot de passe de la base de données.
qui dépend du type em> de mots de passe que vous souhaitez stocker. p>
Si vous souhaitez stocker des mots de passe pour comparer, par exemple. avoir un code> $ utilisateurs code>, puis le hachage est la voie à suivre. Ajout d'un sel comptes pour une sécurité supplémentaire, car le même mot de passe sera n'entraîne pas le même hash s> p>
Si vous souhaitez stocker des mots de passe pour vous connecter à d'autres ressources telles qu'une base de données: vous êtes le plus sûr si vous stockez vos mots de passe en dehors de votre racine de document, c'est-à-dire pas accessible par les navigateurs. Si cela n'est pas possible, vous pouvez utiliser un fichier
SHA1 code>
, MD5 code>
ou toute autre saveur (voici un aperçu) p>
Password_hash code>
utilise un hachage à sens unique salé avec plusieurs tours. P> Li>
.htaccess code> pour refuser toutes les demandes de l'extérieur p> li>
ul>
Je ne vois pas comment stocker les mots de passe en dehors de la racine du document change vraiment quelque chose. Tant que c'est dans Php code> tags, il ne sera pas envoyé au client.
"Seulement" si les fichiers seront traités par PHP ... une installation PHP NUKED pourrait les amener à être envoyé au client dans un texte clair.
@nickf à la fois Facebook et Tumblr ont accidentellement exposé accidentellement leur code PHP via une mauvaise configuration du serveur Web. Cela peut vous arriver aussi. TechCrunch.com/2007/08/11/facebook-source-code -leaked staff.tumblr.com/post/3959106211/ ...
@knittl Pls Mentionnez comment utiliser .htaccess code> pour refuser toute demande comme vous l'avez mentionné.
@YUSUF Deny de tout code>: Stackoverflow.com/Questtions/19118482/...
@knittl - Depuis que je suis un débutant, pour clarification ..... J'ai mes fichiers de code PHP SRC dans le dossier public_html. Donc, je devrais créer un nouveau dossier et en informatique, créer un fichier .htaccess code>. et dans le même dossier, créez un fichier
extra .php code> et dans IT Store DB Nom d'utilisateur, mot de passe, etc. Est-ce une approche correcte ou est-ce que je me trompe mal?
@YUSUF Store Nom d'utilisateur et mot de passe en dehors de votre racine de documents. Par exemple. Si website.com/yourscript.php pointe sur / var / www / html / yyrscript. PHP code>, stockez votre fichier de mot de passe dans
/ var / www / html code> (ne peut pas être atteint à partir d'un WebBrowser, il est en dehors du document). Si cela ne fonctionne pas, ajoutez un répertoire distinct avec un fichier
.htaccess code> avec le contenu décrit dans ma réponse liée.
@knittl - Voulez-vous stocker le fichier de mot de passe dans / var / www / code> car in
/ var / www / html / code>
yourscript.php code> est aussi stocké?
@knittl - ou puis-je simplement inclure mon fichier Connect.php qui sera stocké en dehors du répertoire / var / www / html code> contenant tous les fichiers
php code>?
@YUSUF Il doit être stocké en dehors de la racine du document de votre site Web. Habituellement, le fichier n'aura aucune sortie, il ne sera donc pas possible de le lire de toute façon (à moins que, bien sûr, il existe une autre vulnérabilité dans votre code). Il s'agit simplement d'une protection supplémentaire si vos fichiers PHP ne sont plus interprétés et sorties directement. Si vous vous jouiez avec PHP (et que vous êtes un débutant, je vous suggère de faire plaisir au lieu de créer des sites Web de production), il suffit de mettre le fichier partout où vous le souhaitez et de l'inclure.
@knittl - Je l'ai finalement fait. Merci! .... Ce que j'ai fait était - supposons que mon document racine soit / var / www / public_html code>. Tous les fichiers de code sont ici .. j'ai créé un nouveau répertoire
/ var / www / privé code> et mettre
config.php code> dans celui qui a le mot de passe, etc. et dans
/ var / www / public_html / connect.php code> i inclus
../ privé / config.php code>. Et ça a fonctionné !! Merci
Si vous pouvez récupérer le mot de passe dans PHP, il est récupérable ... p>
La seule chose que vous pouvez faire est de vous déplacer mot de passe sur un emplacement "protégé". P>
La plupart des entreprises hébergées offriront un emplacement séparé dans lequel vous pouvez placer vos fichiers DB, etc., et cet emplacement ne sera pas accessible via le navigateur. Vous devriez stocker des mots de passe là-bas. P>
Mais ils sont toujours sur votre serveur et lorsque quelqu'un a accès à votre boîte, il a votre mot de passe. (Il arrive à votre PHP qui a la voie à la décoder et il a accès au fichier protégé -> il peut le lire) p>
Donc, il n'y a pas de "mot de passe sûr" p>
La seule option que vous avez est de ne pas stocker les mots de passe de vos utilisateurs, etc. ... Je suis fou si je m'abonne à un service, et ils offrent de m'envoyer mon mot de passe par courrier électronique au cas où je l'oublierai. Ils le stockent de manière «récupérable», et ce n'est pas quelque chose que vous devriez faire. p>
C'est là que tout le hachage et la salage sont entrés. Vous voulez percevoir que quelqu'un puisse accéder à une ressource. Donc, votre hash + sel est le mot de passe et stockez cela dans le DB pour l'utilisateur qui souhaite accéder au service, et lorsque l'utilisateur souhaite vous authentifier, appliquez le même algorithme pour créer le hachage et les comparer à ceux-ci. P>
Exactement ... mais je me demande si l'ajout de sauvegardes aléatoires peut aider à réduire la responsabilité si les mots de passe sont volés. J'ai travaillé avec un gars qui a brouillé des mots de passe dans une base de données dans les champs de la base de données. Je suis encore confus. Cela a rendu difficile de travailler avec quand vous vouliez que l'application indique une autre base de données avec un mot de passe différent.
Disons que votre mot de passe est " Juste au cas où il ne serait pas complètement évident em>, vous pouvez facilement accéder au mot de passe plus tard sur iaManuance code>". Voici comment stocker le mot de passe dans votre code. Il suffit de glisser ceci dans votre en-tête quelque part.
$ mot de passe < / code>. À votre santé! : P p> p>
Je ne fais généralement pas confiance au code PHP brut pour les mots de passe des services. Écrivez une simple extension PHP pour libérer le mot de passe. Cela garantit que l'ensemble de travail est gratuit, et il en fait une étape supplémentaire pour une machine compromise pour accorder l'accès au pirate informatique au service. P>
Comme suggéré, stockez le mot de passe SHA1, salé et poivré , puis comparez les deux valeurs p> et si vous le pouvez 'T Stockez vos mots de passe hachés à l'extérieur de la racine du serveur, n'oubliez pas d'instruire Apache d'interdire l'accès à ce fichier, dans votre fichier .htaccess: p>
Peut-être que vous pourriez nous dire pourquoi vous souhaitez stocker vos mots de passe dans un fichier PHP. Cela cause beaucoup de confusion dans les réponses
Je développe un script pour un client. J'utilise un compte "test" car le client ne veut pas personne, mais lui de connaître le mot de passe. Je dois trouver un moyen qui lui permet de changer facilement le mot de passe du compte de test à son sans me le savoir. BTW, cela n'aura aucune interaction avec une base de données.
Vous stockez donc des informations de compte dans un fichier PHP? Si tel est le cas, la réponse acceptée est de loin non plus la meilleure. Un sel hash + est le moyen d'aller dans ce scénario. Votre client pourrait vous donner son hachage salé, et vous n'auriez aucun moyen de connaître son mot de passe (ni personne d'autre)
Je devrai utiliser le mot de passe client pour vous connecter à un certain site mélodramatiquement. Je ne peux pas faire ça si je hachage et sel le mot de passe, ou puis-je? Merci.
OK, vous avez donc besoin du mot de passe pour authentifier sur un autre service (comme un mot de passe de base de données). De cette façon, assurez-vous que votre fichier de mot de passe n'est pas navigable (.htaccess ou une racine de document extérieure)