Protection par mot de passe avec PHP, MySQL, et variables de session

| by Dan McConkey | February 11, 2005
Une des grandes promesses qui sont venues réellement vrai quand notre monde Internet-permis a atteint le vingt et unième siècle est interaction efficace de client-à-affaires. Chaque jour, je trouve une nouvelle manière de passer par les courses de la vie sans attendre jamais sur la prise un caissier guichetier, un pharmacien, ou un agent d'assurance. Je le fais tout en ligne.

Les consommateurs savvy d'Internet enent vienn à s'attendre à une telle habilitation de Web. Et tandis que ces transactions de l'information exigent habituellement une certaine sorte d'informations confidentielles voyageant l'éther, vous, comme webmaster, soutenez le fardeau de maintenir ces données parties de ceux qui n'ont aucun droit à elles.

Puisque la rétine balaye et les signatures d'onde cérébrale sont les propriétés immobiles des chiquenaudes en esclavage de James, nous sommes coincés en utilisant de vieux mots de passe ennuyeux plats.

Est-ce que c'est vraiment bloqué ?

Obtenons ce premier à l'écart. Les seuls fixent vraiment l'ordinateur sont un qui est débranché. Le genre de comme « seule voiture sûre est celui qui se repose dans votre garage. » La vie est une proposition de risque/récompense et, faisons- facelui, ceci (probablement) n'est pas le fort Knox, nous fixent.

Les mesures de sécurité énumérées ici conviennent aux données de jardin-variété. J'ai employé ces arrangements pour écrire les pages principales d'administration de site Web pour les caddies en ligne. Je les ai employés pour écrire des pages de « associé » où les détaillants peuvent télécharger l'ADS et les données de ventes des grossistes. Je ne les avais pas l'habitude pour fixer des nombres de carte de crédit, des nombres de sécurité sociale, ou des codes nucléaires de lancement.

Ainsi quels sont PHP, MySQL, et variables de session ?

PHP est un langage de programmation employé (dans ce cas-ci) pour écrire le HTML. MySQL est une base de données. La variable de session sont employées par des serveurs de Web pour dépister l'information d'une page sur un domaine à l'autre. Cet article n'est pas a comment-à pour l'une ou l'autre technologie. Si vous n'êtes pas très confortable avec eux, vous pourriez juste copier et coller les échantillons de code en cet article et se construire un mot de passe de base a protégé le site Web. Vous pourriez également juste lire les notes de la falaise pour la fierté et compromettre et obtenir C.A. + dans la classe de littérature. Votre choix.

Obtenons commencé par des sessions

On lui dit souvent que le Web est « apatride », signifiant que chaque page Web est entièrement indépendant, n'ayant besoin d'aucune autre page pour exister, et ne prenant aucune information de la page précédente. C'est grand pour surfer anonyme d'un emplacement au prochain, mais il pue pour la protection par mot de passe. Les consommateurs veulent l'information protégée par mot de passe, mais ils ne veulent pas entrer leur mot de passe à chaque page. Ainsi nous nous tournons vers notre web server pour maintenir un utilisateur tandis qu'il se trouve sur notre chantier.

Ex. 1.

< ? php

session_start () ;

?>

< ! DTD xhtml1-strict.dtd'> du PUBLIC de HTML de DOCTYPE « - //W3C//DTD XHTML 1.0 Strict//EN » 'http:// www.w3.org/TR xhtml1/

xml de "" de http://www.w3.org/1999/xhtml de xmlns= de <html " : lang= " en " du lang= " en " >

Vente libre Guide</title></head> du Web de McConkey <head><title>Dan

<body>

Vente libre Guide</p> du Web de McConkey <p>Dan

</body>

</html>

extrémité ex. 1

le session_start () est une fonction de PHP qui regarde pour voir si une session déjà a été commencée alors fait une de deux choses :

1. Si une session a été commencée, elle ne fait rien.

2. Si une session n'a pas été commencée, elle commence un.

Il est important de noter que le session_start () doit se produire avant n'importe quel autre PHP à la page, si vous voulez qu'elle fonctionne. Commencer chaque page mot de passe-protégée par elle. Validation

Maintenant pensons la validation de base. Quelles sortes de choses devons-nous accomplir ?

* D'abord, nous devons vérifier pour voir si l'utilisateur a déjà entré, ainsi nous ne demandons pas un mot de passe à chaque page. Si notre utilisateur a déjà entré, nous le passons à travers au contenu bloqué.

* Si l'utilisateur n'a pas déjà entré, nous avons besoin de lui pour faire ainsi. Ainsi nous devons écrire une forme d'ouverture.

* Nous avons besoin à côté de comparons des résultats de forme d'ouverture à une liste connue d'usernames et de mots de passe. Si l'utilisateur vérifie, nous le passons le long au contenu bloqué.

* Si l'utilisateur ne vérifie pas, nous le dirigeons de nouveau à l'écran d'ouverture.

* Pour finir, nous devons fournir l'utilisateur la capacité de se déconnecter.

Ainsi commençons par un cadre de base que nous compléterons plus tard.

Ex. 2

< ? php

session de début de // sinon déjà commencée

session_start () ;

contrôle de // pour voir si l'utilisateur se déconnectait juste

si ($log_out)

{

}

write_log_in de fonction ($text)

{

} fonction de write_log_in d'extrémité de //

la fonction vérifient ()

{

contrôle de // pour voir s'ils sont déjà entrés

// si oui, de retour rectifient

// si non, contrôle pour voir si le visiteur a juste essayé d'ouvrir une session

// si oui, vérifient le mot de passe

// si cela fonctionnait, retour vrai

// s'il pas, les envoyer de nouveau à l'ouverture

// si l'utilisateur pas ouverture simplement, (s) il a besoin

} l'extrémité de // vérifient la fonction

?>

< ! DTD xhtml1-strict.dtd'> du PUBLIC de HTML de DOCTYPE « - //W3C//DTD XHTML 1.0 Strict//EN » 'http:// www.w3.org/TR xhtml1/

xml de "" de http://www.w3.org/1999/xhtml de xmlns= de <html " : lang= " en " du lang= " en " >

Vente libre Guide</title></head> du Web de McConkey <head><title>Dan

<body>

Vente libre Guide</p> du Web de McConkey <p>Dan

< ? php

contrôle de // pour l'utilisateur valide

si (vérifier ())

{

// commencent le contenu bloqué

faire écho le « <p>Clatu, le verata, nicto</p> » ;

contenu bloqué d'extrémité de //

} extrémité de // si (vérifier ())

?>

</body>

</html>

Finissent ex. 2

Comme I dit, c'est juste un cadre. J'aime lancer tous mes projets de cette façon. Elle me permet d'obtenir une vue grande de ce que je fais avant d'obtenir sali de boue vers le bas dans les détails.

Fondamentalement, jusqu'ici, tout que nous avons fait est endroit un certain contenu secret à l'intérieur d'si rapport. Si l'utilisateur est valide, nous montrons le contenu, sinon, nous pas. Inscription d'une forme d'ouverture

La première chose que nous devrions chair dehors est notre fonction d'ouverture. C'est une forme de base, sans des cloches et des sifflements, ainsi il devrait être assez franc.

3 ex

write_log_in de fonction ($text)

{

écho « 

<p>$text</p>

'' d'action= de method='post de <form >

user-id de < p > : name='user_name/></p> de type='text de <input

<p>Password : name='password/></p> de type='password de <input

type='submit value='Logon'></p> de <p><input

</form>

";

} fonction de write_log_in d'extrémité de //

Extrémité ex. 3

Aucuns problèmes, droite ? Tout cet IS-IS PHP écrivant une forme de base d'ouverture de HTML. Deux choses valent la peine de noter :

1. L'attribut de méthode à l'étiquette de <form> est « poteau ». Nous pourrions avoir employé « obtenons », mais cela ajouterait notre nom et mot de passe d'utilisateur à l'URL comme varibles. our_url d'IE ? user_name=bob&password=truck64. Ceci montre le mot de passe--en texte plat-- droite là dans l'URL. Pourquoi passer toute cette fois sur la sécurité si vous juste vont eteindre les mots de passe des peuples pour l'affichage ?

le « poteau » est beaucoup plus bloqué, forçant le serveur pour maintenir les données de forme, plutôt qui l'URL. Quand vous pouvez garder l'information hors de l'URL, vous êtes une étape plus près d'une page Web bloquée.

2. Après vous voulez regarder l'attribut d'action à l'étiquette de <form>. La laisser blanche indique au serveur que vous projetez traiter ces résultats de forme avec cette même page.

Vérification des valeurs d'ouverture

Let maintenant la chair dehors notre cadre peu plus.

Ex. 4

< ? php

la session de début de // sinon a déjà commencé

session_start () ;

contrôle de // pour voir si l'utilisateur se déconnectait juste

si ($log_out)

{

}

write_log_in de fonction ($text)

{

} fonction de write_log_in d'extrémité de //

la fonction vérifient ()

{

contrôle de // pour voir s'ils sont déjà entrés

// si oui, de retour rectifient

contrôle de // pour voir si le visiteur a juste essayé d'ouvrir une session

$user_name = $_POST [« user_name »] ;

$password = $_POST [« mot de passe »] ;

si (&& $password de $user_name)

{

// vérifient le mot de passe et l'ouverture à la base de données

$db = mysql_pconnect (« localhost », « $user_name », « $password ») ;

si ($db)

{

la variable de session de registre de // et sortent la fonction de vérification

$valid_user = $user_name ;

$_SESSION [« valid_user »] = $valid_user ;

de retour rectifier ;

}

autrement

{

mauvais utilisateur et mot de passe de //

$text = « nom et mot de passe d'utilisateur pas match » ;

write_log_in ($text) ;

}

}

autrement

{

// si l'utilisateur pas ouverture simplement, (s) il a besoin

}

} l'extrémité de // vérifient la fonction

?>

< ! DTD xhtml1-strict.dtd'> du PUBLIC de HTML de DOCTYPE « - //W3C//DTD XHTML 1.0 Strict//EN » 'http:// www.w3.org/TR xhtml1/

xml de "" de http://www.w3.org/1999/xhtml de xmlns= de <html " : lang= " en " du lang= " en " >

Vente libre Guide</title></head> du Web de McConkey <head><title>Dan

<body>

Vente libre Guide</p> du Web de McConkey <p>Dan

< ? php

contrôle de // pour l'utilisateur valide

si (vérifier ())

{

// commencent le contenu bloqué

faire écho le « <p>Clatu, le verata, nicto</p> » ;

contenu bloqué d'extrémité de //

} extrémité de // si (vérifier ())

?>

</body>

</html>

Finissent ex. 4

D'abord, nous vérifierons si l'utilisateur a juste essayé d'ouvrir une session.

$_POST est une rangée superglobal de PHP qui maintient des données envoyées à une page par l'intermédiaire d'une étiquette de method='post'> de <form. Dans la fonction d'ouverture, nous avons appelé notre user_name et mot de passe d'entrées, ainsi nous pouvons accéder à l'utilisateur entré en appelant $_POST [« user_name »] et $_POST [« mot de passe »].

Nous courons après si (&& $password de $user_name) rapport pour voir si des valeurs de prise de $_POST [« user_name »] et de $_POST [« mot de passe »]. Si elles, l'utilisateur a juste essayé d'ouvrir une session.

Notre prochaine section de code est la pièce qui réellement des contrôles si le nom et le mot de passe d'utilisateur sont corrects. Ici, nous employons la table d'utilisateur de MySQL (une partie de la base de données de mysql) pour maintenir nos utilisateurs. C'est, peut-être, le meilleur itinéraire, car MySQL est déjà placé jusqu'aux autorisations d'accès de commande. Cependant, ceci peut présenter des problèmes quand vous voulez maintenir le raccordement de base de données ouvert à travers des pages. En outre, quelques compagnies de accueil ne te donneront pas l'accès de concession (vous laisser font de nouveaux utilisateurs) à la base de données de mysql.

Dans ces cas, vous pouvez accomplir plus ou moins la même chose en installant votre propre table d'utilisateurs dans votre base de données. Vous devriez alors écrire une question de SQL qui compare des noms et des mots de passe d'utilisateur. Cela regarderait n'importe quoi de pareil :

Ex. 5

$select = « user_name choisi des utilisateurs

là où user_name d'user_name='$

et password=PASSWORD (« $password ») » ;

$query = mysql_query ($select) ;

si == 1 (de mysql_num_rows ($query))

{

utilisateur validé par // et mot de passe

...

Extrémité 5 ex

Obtenant de nouveau à notre validation en utilisant MySQL construit dans les dispositifs, nous savons que le nom et le mot de passe d'utilisateur ont vérifié parce que la tentative de raccordement a renvoyé vrai.

Enregistrement d'une variable de session

Maintenant que nous connaissons notre contrôle de nom et de mot de passe d'utilisateur dehors, nous devons stocker cette information et permettre à notre utilisateur de continuer de surfer notre secteur protégé sans entrer chaque page. Regardant arrières l'exemple quatre, nous notons des autres des variables superglobal de PHP : $_SESSION.

$_SESSION est une rangée qui tient toutes nos variables de session. En plaçant la variable de session de valid_user, nous pouvons plus tard faire un appel à à l'ession_is_registered (« valid_user ») pour voir si notre utilisateur a déjà entré avec succès.

Se déconnecter

La dernière chose que nous devons nous occuper permet à nos utilisateurs de noter hors de notre système. Dans ce cas-ci, nous avons employé un intérieur simple de lien notre secteur protégé.

6 ex

< ? php

la session de début de // sinon a déjà commencé

session_start () ;

contrôle de // pour voir si l'utilisateur se déconnectait juste

si ($log_out)

{

session_unregister (« valid_user ») ;

session_destroy () ;

session_start () ;

}

write_log_in de fonction ($text)

{

} fonction de write_log_in d'extrémité de //

la fonction vérifient ()

{

} l'extrémité de // vérifient la fonction

?>

< ! DTD xhtml1-strict.dtd'> du PUBLIC de HTML de DOCTYPE « - //W3C//DTD XHTML 1.0 Strict//EN » 'http:// www.w3.org/TR xhtml1/

xml de "" de http://www.w3.org/1999/xhtml de xmlns= de <html " : lang= " en " du lang= " en " >

Vente libre Guide</title></head> du Web de McConkey <head><title>Dan

<body>

Vente libre Guide</p> du Web de McConkey <p>Dan

< ? php

contrôle de // pour l'utilisateur valide

si (vérifier ())

{

faire écho « la notation out</a></p> du href='? log_out=1'> de <p><a » ;

// commencent le contenu bloqué

faire écho le « <p>Clatu, le verata, nicto</p> » ;

...

Finir 6 ex

D'abord, regardant dans le corps de HTML, nous voyons un lien simple de HTML qui ajoute une variable à l'URL. Dans ce cas-ci, le nom variable est log_out et sa valeur est 1. Nous employons 1 comme valeur parce qu'il est facile d'entreposé dans un URL, mais vraiment n'importe quelle valeur zéro plus grand que fonctionnera.

Une fois que nous passons une demande de sortie du système à la page, nous devons la traiter. C'est ce qui si la partie ($log_out) est pour.

Si le rapport vérifie si une demande de sortie du système était passée. Une fois qu'elle voit qu'on était, il des unregisters la variable de session de valid_user, alors il détruit la session entièrement.

Ironiquement, il commence un nouveau support de droite de session. C'est au cas où l'utilisateur déciderait d'ouvrir une session plus tard (sans fermeture la fenêtre de navigateur), ou ouvrent une session en tant qu'utilisateur différent. Le code final

Le mettant tout ensemble nous obtenons ceci :

Ex. 7

< ? php

la session de début de // sinon a déjà commencé

session_start () ;

contrôle de // pour voir si l'utilisateur se déconnectait juste

si ($log_out)

{

session_unregister (« valid_user ») ;

session_destroy () ;

session_start () ;

}

write_log_in de fonction ($text)

{

écho « 

<p>$text</p>

'' d'action= de method='post de <form >

user-id de < p > : name='user_name/></p> de type='text de <input

<p>Password : name='password/></p> de type='password de <input

type='submit value='Logon'></p> de <p><input

</form>

";

} fonction de write_log_in d'extrémité de //

la fonction vérifient ()

{

contrôle de // pour voir s'ils sont déjà entrés

si (session_is_registered (« valid_user »)) retour vrai ;

contrôle de // pour voir si le visiteur a juste essayé d'ouvrir une session

$user_name = $_POST [« user_name »] ;

$password = $_POST [« mot de passe »] ;

si (&& $password de $user_name)

{

// vérifient le mot de passe et l'ouverture à la base de données

$db = mysql_pconnect (« localhost », « $user_name », « $password ») ;

si ($db)

{

la variable de session de registre de // et sortent la fonction de vérification

$valid_user = $user_name ;

$_SESSION [« valid_user »] = $valid_user ;

de retour rectifier ;

}

autrement

{

mauvais utilisateur et mot de passe de //

$text = « nom et mot de passe d'utilisateur pas match » ;

write_log_in ($text) ;

}

}

autrement

{

l'utilisateur de // doit ouvrir une session

$text = « ceci est un serveur bloqué. Svp ouverture.  » ;

write_log_in ($text) ;

}

} l'extrémité de // vérifient la fonction

?>

< ! DTD xhtml1-strict.dtd'> du PUBLIC de HTML de DOCTYPE « - //W3C//DTD XHTML 1.0 Strict//EN » 'http:// www.w3.org/TR xhtml1/

xml de "" de http://www.w3.org/1999/xhtml de xmlns= de <html " : lang= " en " du lang= " en " >

Vente libre Guide</title></head> du Web de McConkey <head><title>Dan

<body>

Vente libre Guide</p> du Web de McConkey <p>Dan

< ? php

contrôle de // pour l'utilisateur valide

si (vérifier ())

{

faire écho « la notation out</a></p> du href='? log_out=1'> de <p><a » ;

// commencent le contenu bloqué

faire écho le « <p>Clatu, le verata, nicto</p> » ;

contenu bloqué d'extrémité de //

} extrémité de // si (vérifier ())

?>

</body>

</html>

Finissent ex. 7

C'est un joli bloc lourd de code à mettre à la tête de chaque page Web. Typiquement, je mettrais le mon vérifie () et des fonctions de write_log_in () dans un dossier de seperate et les mets en référence avec une fonction d'inclusion (). Cela fournit le benifit supplémentaire de mettre à jour votre site Web entier en éditant un dossier seulement.

Espérer que des aides.

Garantir les droits d'auteur (c) Dan 2005 McConkey

Article Source: http://www.articleset.com



About the Author

Dan McConkey is a freelance web marketing professional, working in and around Charlotte, NC. In the web, Dan has found an amazing potential for lead generation for businesses. Using traditional advertising theories, appropriate technologies, and a little common sense, your electronic marketing campaigns can easily be your most effective.

Dan maintains Dan McConkey's Free Web Marketing Guide at http://www.dmcconkey.com

dmcconkey@yahoo.com » Read more articles by Dan McConkey
You are welcome to publish or reprint this article free of charge, provided: