• Aucun résultat trouvé

IP - Avantage et utilisation Authentification par IP IP - problèmes Plan 1

N/A
N/A
Protected

Academic year: 2022

Partager "IP - Avantage et utilisation Authentification par IP IP - problèmes Plan 1"

Copied!
6
0
0

Texte intégral

(1)

IFT1147

Programmation Serveur Web avec PHP Authentification

IFT1147 - Authentification 2

Plan

Authentification par adresse IP

Authentification HTTP

htaccess

PHP

Authentification par formulaire HTML

Sans encryption

Avec encryption

HTTPS

Authentification par adresse IP

Une façon très simple d’authentifier un groupe d’usagers

IFT1147 - Authentification 4

Authentification par 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

if ($_SERVER["REMOTE_ADDR"]== … )

IFT1147 - Authentification 5

IP - Avantage et utilisation

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 6

IP - problèmes

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.

(2)

Authentification HTTP

Servons-nous des possibilités incorporées au protocole HTTP

IFT1147 - Authentification 8

Authentification HTTP

Requête pour le document et réponse qu’une authentification est nécessaire

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 9

Authentification HTTP

Le navigateur présente alors une boîte de dialogue à l’usager et retourne ensuite sa requête.

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 10

Le fichier .htaccess

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 sous- répertoires.

Contenu de .htaccess

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.

htpasswd

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.

(3)

IFT1147 - Authentification 13

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 14

htaccess et htpasswd - remarques

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.

IFT1147 - Authentification 15

htaccess et htpasswd - désavantages

Il n’est pas facile de créer un logout.

L’usager ne peut pas facilement lui- mê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 16

Authentification HTTP et PHP

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 17

Et sans le fichier .htaccess

PHP permet d’envoyer des en-têtes HTTP avec la fonction header().

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.

Authentification avec un formulaire

À vous la puissance et

l’obligation de défendre vos choix de sécurité

(4)

IFT1147 - Authentification 19

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 20

Login et mot de passe - BD

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.

IFT1147 - Authentification 21

Première recette de vérification

$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 22

Dangers de cette recette

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.

Fonction à sens unique

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

md5()

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.

(5)

IFT1147 - Authentification 25

Authentification avec encryption

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 26

Deuxième recette de vérification

$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;    

} }

IFT1147 - Authentification 27

Encore un peu plus de sécurité

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 28

Troisième recette de vérification

$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;    

} }

IFT1147 - Authentification 29

md5() et MySQL

MySQL contient aussi une fonction md5()

Il est plutôt dangereux de changer la recette précédente à

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.

https

Et encore plus de sécurité …

(6)

IFT1147 - Authentification 31

https

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 !

IFT1147 - Authentification 32

Certificats

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, celui- ci affiche un avertissement.

IFT1147 - Authentification 33

L’authentification est réussie …

Une fois passée l’étape de l’authentifi- cation, 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.

Références

Documents relatifs

ƒ partager des ressources matérielles (ex : une imprimante pour une salle, cela permet de faire des économies de matériel),.. ƒ Partager l’accès

Le champ Longueur totale est codé sur 16 bits et représente la longueur du paquet incluant l'entête IP et les Data associées.. La longueur totale est exprimée en octets,

access-list <number> {permit | deny} <protocol> <source> [<ports>] <destination> [<ports>] [<options>].

Vu du dehors, on ne verra qu'un seul hôte: la passerelle, c'est la raison pour laquelle ce type d'interconnexion ne permet pas de placer des

Hash Message Authentication Code (HMAC) A hash of the data and secret key used to provide message authenticity.

Le but de cette formation est de donner aux participants les bases nécessaires pour une mise en œuvre rapide et efficace de la pile TCP/IP, CMX-TCPIP de CMX.. Par le biais

Les couches hautes de la pile OSI sont regroupées en une seule couche Application.. Application : http, ftp, pop, smtp, telnet, snmp, dns, … Transport : tcp, udp,

2) Soit X : le nombre d’adresses dont une entreprise a besoin pour identifier ses machines et N x le nombre de bits empruntés pour adresser les hôtes.. Chaque agence est reliée à