Plan Authentification par IP IP - Avantage et utilisation IP

Transcription

Plan Authentification par IP IP - Avantage et utilisation IP
Plan
IFT1147
Programmation Serveur Web avec PHP
 Authentification par adresse IP
 Authentification HTTP
Authentification


htaccess
PHP
 Authentification par formulaire HTML


Sans encryption
Avec encryption
 HTTPS
IFT1147 - Authentification
2
Authentification par IP
Authentification par adresse IP
 Une façon très simple pour limiter l’accès
à un site est de n’autoriser que certaines
adresses IP.
 Le tableau associatif $_SERVER contient
la clé REMOTE_ADDR qui pointe vers
l’adresse IP du client.
 C’est donc aussi simple que
Une façon très simple d’authentifier
un groupe d’usagers
if ($_SERVER["REMOTE_ADDR"]== … )
IFT1147 - Authentification
IP - Avantage et utilisation
IP - problèmes
 Très simple à utiliser
 Utilisé par exemple par des journaux
scientifiques afin de permettre l’accès à
un campus au complet
 Un firewall peut être utilisé dans le
même but …
IFT1147 - Authentification
4
 Aucune combinaison de login et mot de
passe - tout le monde possède les
mêmes droits.
 Un réseau complet d’ordinateurs derrière
un proxy peut posséder la même adresse
IP.
 L’adresse IP d’un ordinateur peut
changer d’une requête à une autre.
5
IFT1147 - Authentification
6
1
Authentification HTTP
Authentification HTTP
 Requête pour le document et réponse
qu’une authentification est nécessaire
Servons-nous des possibilités
incorporées au protocole HTTP
GET /~dift1147/exemples/Securite/Apache/page1.php
HTTP/1.1
Host: www-desi.iro.umontreal.ca
[…]
HTTP/1.x 401 Authorization Required
WWW-Authenticate: Basic
realm="IFT1147 - Exemple htaccess"
[…]
IFT1147 - Authentification
Le fichier .htaccess
Authentification HTTP
 Le navigateur présente alors une boîte
de dialogue à l’usager et retourne
ensuite sa requête.
 Afin d’indiquer à Apache qu’une
authentification est nécessaire pour un
répertoire, on place un fichier de nom
.htaccess dans le répertoire en
question.
 On protège ainsi tous les documents
dans le répertoire et dans ses sousrépertoires.
GET /~dift1147/exemples/Securite/Apache/page1.php
HTTP/1.1
Host: www-desi.iro.umontreal.ca
Authorization: Basic dGVzdDp0ZXN0
[…]
HTTP/1.x 200 OK
[…]
IFT1147 - Authentification
9
Contenu de .htaccess
IFT1147 - Authentification
10
htpasswd
AuthName "IFT1147 - Exemple htaccess"
AuthType Basic
AuthUserFile
/home/www-desi/usagers/dift1147/.htpasswd
require valid-user
 AuthUserFile indique le nom du fichier
contenant les logins et mots de passe.
IFT1147 - Authentification
8
 Le fichier .htpasswd doit être créé avec
la commande htpasswd
$ htpasswd -c .htpasswd usager
New password:
Re-type new password:
Adding password for user usager
$
 Le paramètre -c sert à créer le fichier.
11
IFT1147 - Authentification
12
2
htaccess et htpasswd remarques
htaccess et htpasswd remarques
 Les fichiers .htaccess et .htpasswd
doivent tous les deux être en lecture
pour tout le monde. Sinon,
l’authentification échoue !
 Idéalement, on place le fichier
.htpasswd dans un répertoire qui n’est
pas accessible par le Web.
IFT1147 - Authentification
 Afin d’enlever un usager, il suffit
d’effacer la ligne correspondante dans le
fichier .htpasswd.
 Le fichier .htaccess peut aussi servir à
donner d’autres instructions à Apache à
part celles d’authentification.
13
htaccess et htpasswd désavantages
15
Et sans le fichier .htaccess
 Le login et le mot de passe fournis par
l’usager sont accessibles en PHP. On
peut ainsi créer des affichages
particuliers pour chaque usager.
 $_SERVER["PHP_AUTH_USER"] et
$_SERVER["PHP_AUTH_PW"] sont les
deux variables à utiliser.
IFT1147 - Authentification
16
Authentification avec un formulaire
 PHP permet d’envoyer des en-têtes
HTTP avec la fonction header().
À vous la puissance
et
l’obligation de défendre vos choix
de sécurité
 On peut donc très bien envoyer le code
401, recevoir en PHP le login et le mot
de passe fournis par l’usager et créer sa
propre fonction d’authentification.
IFT1147 - Authentification
14
Authentification HTTP et PHP
 Il n’est pas facile de créer un logout.
 L’usager ne peut pas facilement luimême changer son mot de passe; il n’y a
pas d’infrastructure prévue à cet effet. À
la limite, vous pourriez créer une
interface Web pour l’appel à htpasswd
… avec tous les problèmes de sécurité
que cela entraîne !
IFT1147 - Authentification
IFT1147 - Authentification
17
3
Authentification avec un formulaire
 L’authentification avec un formulaire
permet la plus grande liberté. Vous
définissez le formulaire, les critères pour
un login et un mot de passe valides, etc.
 On peut aussi facilement créer un
formulaire permettant à l’usager de
changer son mot de passe.
IFT1147 - Authentification
19
Première recette de vérification
21
Fonction à sens unique
IFT1147 - Authentification
20
 Les mots de passe ne sont pas
encryptés.
 Tout le monde qui a accès à la base de
données peut donc, potentiellement,
connaître le mot de passe de chaque
usager.
 Souvent, on encrypte donc les mots de
passe.
IFT1147 - Authentification
22
md5()
 Une fonction à sens unique est une
fonction qui se calcule facilement dans
un sens, mais pas du tout, ou seulement
très difficilement, dans le sens inverse.
 Il ne faut jamais encrypter de données
dont on aura besoin dans le futur avec
une fonction à sens unique: on ne
pourra pas les décrypter !
IFT1147 - Authentification
 Lorsque l’authentification est gérée par
un formulaire, il faut sauvegarder le login
et le mot de passe côté serveur; la
plupart du temps dans une BD.
 Le login doit être unique pour chaque
usager. On place donc une clé unique
(ou primaire, selon les besoins) sur la
colonne login.
Dangers de cette recette
$returnValue = false; $requeteID = mysql_query("SELECT password
FROM users
WHERE login='$userLogin'");
if (mysql_num_rows($requeteID) > 0) {
$ligne = mysql_fetch_assoc($requeteID);
if ($userPwd == $ligne["password"]) {
$returnValue = true; }
}
IFT1147 - Authentification
Login et mot de passe - BD
23
 La fonction md5() est une fonction à
sens unique.
 Elle est définie en détail à
http://www.faqs.org/rfcs/rfc1321.html
 Elle retourne une « signature » unique
de 32 charactères du message fourni en
entrée.
IFT1147 - Authentification
24
4
Authentification avec encryption
Deuxième recette de vérification
 Lorsque l’usager s’inscrit au site, il
fournit un login et un mot de passe. Le
mot de passe est sauvegardé de façon
encrypté dans la base de données.
 Lorsque l’usager retourne sur le site, il
entre son login et mot de passe. Le mot
de passe est encrypté de nouveau et
comparé à la version sauvegardée.
IFT1147 - Authentification
$returnValue=false; $requeteID = mysql_query("SELECT password
FROM users
WHERE login='$userLogin'");
if (mysql_num_rows($requeteID) > 0) {
$ligne=mysql_fetch_assoc($requeteID);
if (md5($userPwd) ==
$ligne["password"]) {
$returnValue=true; }
}
25
Encore un peu plus de sécurité
26
Troisième recette de vérification
 Deux usagers peuvent choisir le même
mot de passe. L’encryption de leur mot
de passe par md5() retournera alors
deux fois la même signature.
 Ceci n’est généralement pas souhaitable
pour la sécurité. Mieux vaut concaténer
le login avec le mot de passe afin de
former des encryptions uniques.
IFT1147 - Authentification
IFT1147 - Authentification
$returnValue=false; $requeteID = mysql_query("SELECT password
FROM users
WHERE login='$userLogin'");
if (mysql_num_rows($requeteID) > 0) {
$ligne=mysql_fetch_assoc($requeteID);
if (md5($userLogin . $userPwd) ==
$ligne["password"]) {
$returnValue=true; }
}
27
md5() et MySQL
IFT1147 - Authentification
28
https
 MySQL contient aussi une fonction md5()
 Il est plutôt dangereux de changer la
recette précédente à
Et encore plus de sécurité …
SELECT count(*) AS nombre FROM users
WHERE login='$userLogin’
AND password=md5('$userPwd’ )
 Le mot de passe serait transmis en clair
entre le serveur Web et le serveur de
base de données.
IFT1147 - Authentification
29
5
https
Certificats
 Le protocole https permet d’encrypter les
communications entre serveur Web et
navigateur.
 L’utilisation de https est totalement
transparente au niveau PHP.
 Par contre, c’est un travail
supplémentaire pour le serveur Web !
 Le protocole https suppose que le
serveur Web possède un certificat de
sécurité « prouvant » l’identité du
serveur Web.
 Il est généralement délivré par une
entreprise reconnue. Si l’entreprise n’est
pas enregistrée dans le navigateur, celuici affiche un avertissement.
IFT1147 - Authentification
IFT1147 - Authentification
31
32
L’authentification est réussie …
 Une fois passée l’étape de l’authentification, l’application doit être capable de se
souvenir de l’identité de chaque usager.
 Il n’est quand même pas envisageable de
demander le login et mot de passe à
l’usager à chaque page !
 On doit alors se servir d’une gestion de
sessions.
IFT1147 - Authentification
33
6

Documents pareils