Lorsque les utilisateurs conçoivent et gèrent des sites, ils doivent souvent restreindre l'accès à certains fichiers ou informations importants. Habituellement, nous pouvons utiliser le mécanisme d'authentification des utilisateurs basé sur le protocole HTTP intégré au serveur WEB. Lorsqu'un visiteur parcourt une page protégée, le navigateur client affiche une fenêtre de dialogue demandant à l'utilisateur de saisir un nom d'utilisateur et un mot de passe pour vérifier l'identité de l'utilisateur afin de déterminer si l'utilisateur a le droit d'accéder à la page. Deux méthodes sont utilisées pour illustrer son principe de mise en œuvre.
1. Utilisez les en-têtes HTTP pour implémenter
les en-têtes. L'en-tête est une chaîne envoyée par le serveur avant de transmettre les informations HTML au navigateur à l'aide du protocole HTTP. HTTP utilise un modèle défi/réponse pour authentifier les utilisateurs qui tentent d'accéder à des zones protégées par mot de passe. Concrètement, lorsqu'un utilisateur demande au serveur WEB d'accéder pour la première fois à une zone protégée, le processus de contestation est lancé et le serveur renvoie un en-tête 401 spécial, indiquant que l'identité de l'utilisateur n'a pas été vérifiée. Après avoir détecté la réponse ci-dessus, le navigateur client affiche automatiquement une boîte de dialogue demandant à l'utilisateur de saisir un nom d'utilisateur et un mot de passe. Une fois que l'utilisateur a terminé la saisie et cliqué sur OK, ses informations d'identification sont envoyées au serveur pour vérification. Si le nom d'utilisateur et le mot de passe saisis par l'utilisateur sont valides, le serveur WEB permettra à l'utilisateur d'accéder à la zone protégée et de maintenir la validité de son identité tout au long du processus d'accès. Au contraire, si le nom d'utilisateur ou le mot de passe saisi par l'utilisateur ne peut pas être vérifié, le navigateur client affichera en permanence une fenêtre de saisie demandant à l'utilisateur d'essayer de saisir à nouveau les informations correctes. L'ensemble du processus se poursuivra jusqu'à ce que l'utilisateur entre dans l'emplacement d'informations correct. Vous pouvez également définir le nombre maximum de tentatives que l'utilisateur est autorisé à effectuer. En cas de dépassement, la demande d'accès de l'utilisateur sera automatiquement refusée.
Dans le script PHP, utilisez la fonction header() pour envoyer directement l'en-tête HTTP au navigateur du client, afin que la fenêtre de saisie du nom d'utilisateur et du mot de passe s'affiche automatiquement sur le client pour implémenter notre fonction d'authentification d'identité. En PHP, les informations saisies par l'utilisateur client sont automatiquement enregistrées dans les trois variables globales $PHP_AUTH_USER, $PHP_AUTH_PW et $PHP_AUTH_TYPE après leur transmission au serveur. En utilisant ces trois variables, nous pouvons vérifier l'identité de l'utilisateur en fonction des informations du compte utilisateur stockées dans le fichier de données ou la base de données.
Cependant, il faut rappeler aux utilisateurs que $PHP_AUTH_USER et $PHP_AUTH_PW ne peuvent être utilisés que dans PHP installé en tant que module. et les trois variables $PHP_AUTH_TYPE. Si l'utilisateur utilise PHP en mode CGI, la fonction de vérification ne peut pas être implémentée. La méthode d'installation du module PHP est jointe à la fin de cette section.
Ci-dessous, nous utilisons la base de données Mysql pour stocker l'identité de l'utilisateur. Nous devons extraire le nom d'utilisateur et le mot de passe de chaque compte de la base de données pour comparer avec les variables $PHP_AUTH_USER et $PHP_AUTH_PW afin de déterminer l'authenticité de l'utilisateur.
Tout d'abord, créez une base de données dans MySql pour stocker les informations utilisateur.
Le nom de la base de données est XinXiKu et le nom de la table est user ; la définition de la table est la suivante :
créer un utilisateur de table (
ID INT(4) NON NULL AUTO_INCREMENT,
nom VARCHAR(8) NON NULL,
mot de passe CHAR(8) NON NULL,
CLÉ PRIMAIRE (ID)
)
Description :
1. ID est un numéro de série, qui n'est pas nul et est automatiquement incrémenté.
2. name est le nom d'utilisateur et ne peut pas être vide.
3. password est le mot de passe de l'utilisateur et ne peut pas être vide ;
ce qui suit est la connexion au fichier de vérification de l'utilisateur. php
// Déterminez si le nom d'utilisateur est défini.
si(!isset($PHP_AUTH_USER)) {
header("WWW-Authenticate:Basic realm="Fonction d'authentification"");
en-tête("HTTP/1.0 401 Non autorisé");
echo "L'authentification a échoué, vous n'êtes pas autorisé à partager les ressources réseau !";
sortie();
}
/*Se connecter à la base de données*/
$db=mysql_connect("localhost","root","");
//Sélectionner la base de données
mysql_select_db("XinXiKu",$db);
//Vérifie si l'utilisateur existe
$result=mysql_query("SELECT * FROM utilisateur où nom='$PHP_AUTH_USER' et mot de passe='$PHP_AUTH_PW'",$db);
si ($maligne = mysql_fetch_row($result)) {
//Les opérations suivantes sont liées après une authentification réussie
...
} autre {
//L'authentification échoue, invite l'utilisateur à ressaisir
header("WWW-Authenticate:Basic realm="Fonction d'authentification"");
en-tête("HTTP/1.0 401 Non autorisé");
echo "L'authentification a échoué, vous n'êtes pas autorisé à partager les ressources réseau !";
sortie();
}
?>
Description du programme :
Dans le programme, vérifiez d'abord si la variable $PHP_AUTH_USER a été définie. S'il n'est pas défini, cela signifie que l'authentification est requise. Le script envoie un en-tête de numéro d'erreur HTTP 401 pour indiquer au navigateur du client que l'authentification est requise. Le navigateur du client ouvre une fenêtre d'authentification, invitant l'utilisateur à saisir le nom d'utilisateur et. mot de passe. Une fois la saisie terminée, la base de données de connexion vérifie si le nom d'utilisateur et le mot de passe sont corrects. S'ils sont corrects, autorisez la connexion à effectuer les opérations associées. S'ils sont incorrects, continuez à demander à l'utilisateur de saisir le nom d'utilisateur et le mot de passe.
Description de la fonction :
1. isset() : utilisé pour déterminer si une variable a reçu une valeur. Selon que la valeur de la variable existe, renvoie true ou false
2. header() : utilisé pour envoyer des en-têtes HTTP spécifiques. Notez que lorsque vous utilisez la fonction header(), assurez-vous de l'appeler avant tout code HTML ou PHP qui produit la sortie réelle.
3. mysql_connect() : ouvrez la connexion au serveur MySQL.
4. mysql_db_query() : Envoie la chaîne de requête (requête) à la base de données MySQL.
5. mysql_fetch_row() : renvoie chaque champ d'une seule colonne.
2. Utilisez la session pour implémenter la vérification du serveur
Pour les pages nécessitant une authentification, il est préférable d'utiliser la vérification du serveur Apache. Cependant, l'interface de vérification du serveur Apache n'est pas assez conviviale. De plus, PHP en mode CGI et PHP sous IIS ne peuvent pas être vérifiés à l'aide du serveur Apache. De cette façon, nous pouvons utiliser la session pour enregistrer l'identité de l'utilisateur entre différentes pages afin de réaliser une vérification d'identité.
Sur le backend, nous utilisons également la base de données Mysql ci-dessus pour stocker les informations utilisateur.
Nous écrivons d'abord une interface de connexion utilisateur, le nom du fichier est login.php, le code est :
____________________________________________________________
<form action="login1.php">
Nom d'utilisateur :<input type="text" name="name"><br>
Mot de passe :<input type="text" name="pass"><br>
<input type="submit" value="Login">
</form>
___________________________________________________________
login1.php traite le formulaire soumis, le code est le suivant :
$ db=mysql_connect ("localhost","root","");
mysql_select_db("XinXiKu",$db);
$result=mysql_query("SELECT * FROM user où nom='$nom' et mot de passe='$pass'",$db);
si ($maligne = mysql_fetch_row($result)) {
//Enregistrer l'utilisateur
session_start();
session_register("utilisateur");
$user=$maligne["utilisateur"];
// Vérification d'identité réussie, effectuer les opérations associées
...
} autre {
echo "L'authentification a échoué, vous n'êtes pas autorisé à partager les ressources réseau !";
}
?>
Il convient de noter ici que les utilisateurs peuvent utiliser **http://domainname/next.php?user=username** dans les opérations ultérieures pour contourner l'authentification. Par conséquent, les opérations ultérieures doivent d'abord vérifier si la variable est enregistrée : si elle est enregistrée, effectuez l'opération correspondante, sinon elle sera considérée comme une connexion illégale. Le code correspondant est le suivant :
session_start();
si (!session_is_registered("user")){
echo "Échec de l'authentification, connexion illégale !";
} autre {
//Connectez-vous avec succès pour effectuer les opérations associées
...
}
?>
Annexe : Comment installer PHP en mode module
1. Téléchargez d'abord le fichier : mod_php4-4.0.1-pl2. [Si le vôtre n'est pas PHP4, mettez à niveau dès que possible !]
Après la décompression, il y a trois fichiers : mod_php4.dll, mod_php4.conf, readme.txt
2. Copiez les fichiers associés Copiez
mod_php4.dll dans le répertoire modules du. Répertoire d'installation d'Apache.
Copiez mod_php4.conf dans le répertoire conf du répertoire d'installation d'Apache.
Copiez le fichier msvcrt.dll dans le répertoire d'installation d'Apache.
3. Ouvrez le fichier conf/srm.conf et ajoutez la phrase
Include conf/mod_php4.conf.
pour ce faire, veuillez auparavant supprimer toutes les instructions de configuration concernant le mode CGI dans votre httpd.conf, c'est-à-dire la partie similaire à la suivante :
ScripAlias /php4/ "C:/php4/"
Application AddType/x-httpd-php4 .php
Application AddType/x-httpd-php4 .php3
Application AddType/x-httpd-php4 .php4
Action application/x-httpd-php4 /php4/php.exe
Si vous souhaitez que PHP prenne en charge plus de suffixes, pas de problème. Le fichier de configuration donné mod_php4.conf prend déjà en charge trois suffixes : php, php3 et php4. Si vous souhaitez prendre en charge plus de suffixes, vous pouvez modifier ce fichier.
4.
Utilisez <? phpinfo( ?> pour tester. Vous verrez que la valeur de l'API du serveur est Apache, pas cgi, et il existe également des informations sur les informations sur les en-têtes HTTP.