Cette publication ne fait pas partie de la bibliothèque YouScribe
Elle est disponible uniquement à l'achat (la librairie de YouScribe)
Achetez pour : 29,99 € Lire un extrait

Téléchargement

Format(s) : PDF

avec DRM

Le grand livre de PHP 5

De
576 pages

Le langage PHP reste inégalé pour développer rapidement des applications Internet, faisant appel à des bases de données. Ce livre démontre la puissance et la souplesse de ce langage, en fournissant des conseils de pro, des exemples pratiques, des boîtes à outil réutilisables et des exemples d'application professionnelles. L'auteur propose aussi des passerelles vers les langages orientés objet (Java, C++), permettant de réutiliser les programmes et les portions de code déjà développées. Résolument pratique, ce livre se distingue des ouvrages déjà édités, qui se contentent souvent de reprendre les consignes du PHP Group. En effet, il s'inspire de cas réels et fournit de véritables boîtes à outils réutilisables pour tout programmeur et webmaster.

Voir plus Voir moins

Vous aimerez aussi

Python Pour les Nuls

de first-interactive

Tpmp n2

de thekiller

Coder efficacement

de editions-d-booker

PHP
:
un
10
langage
10.1 SÉCURITÉ DES FICHIERS
sécurisé
PHP est soumis aux règles de sécurité internes de la plupart des systèmes côté serveurs : il respecte notamment les droits des fichiers et des dossiers. Une attention particulière doit être portée aux fichiers ou dossiers qui sont accessibles à tout le monde, afin de s’assurer qu’ils ne divulguent pas d’informations critiques ou confi dentielles. Puisque PHP a été fait pour permettre aux utilisateurs d’accéder aux fichiers, il est possible de créer un script qui vous permet de lire des fichiers tels que /etc/password, de modifier les connexions Ethernet, lancer des impressions de documents, etc. Cela implique notamment que vous devez vous assurer que les fichiers accédés p ar les scripts sont bien ceux qu’il faut. Considérez le script suivant, où l’utilisateur indique qu’il souhaite effacer un fichier dans son dossier racine. Nous supposons que PHP est utilisé comme interface Web pour gérer les fichiers, et que l’utilisateur Apache est autorisé à effacer les fichiers dans le dossier racine des utilisateurs. Une erreur de vérification de variable conduit à l’effacement d’un fichier, par exemple : <?php // Efface un fichier dans un dossier racine $username = $_POST[’user_submitted_name’]; $homedir = "/home/$username"; $file_to_delete = "$userfile"; unlink ($homedir/$userfile); echo "$file_to_delete a été effacé!"; ?>
252
Chapitre 10. PHP : un langage sécurisé
Étant donné que le nom de l’utilisateur est à fournir, des intrus peuvent envoyer un nom d’utilisateur autre que le leur, et effacer des documents dans les comptes de s autres utilisateurs. Dans ce cas, vous souhaiterez utiliser une autre forme d’authentification. Considé rez ce qui pourrait se passer si les utilisateurs passent « ../etc/ » et « passwd » comme arguments. Le code serait exécuté tel que : <?php // efface un fichier n’importe où sur le disque dur, // où l’utilisateur PHP a accès. Si PHP a un accès root : $username = "../etc/"; $homedir = "/home/../etc/"; $file_to_delete = "passwd"; unlink ("/home/../etc/passwd"); echo "/home/../etc/passwd a été effacé!"; ?>
Il y a deux mesures primordiales à prendre pour éviter ces manœuvres : Limiter les permissions de l’utilisateur Web PHP. Vérifier toutes les variables liées aux chemins et aux fichiers qui sont fournis.
Voici un script renforcé : <?php // Efface un fichier sur le disque où l’utilisateur // à le droit d’aller $username = $_SERVER[’REMOTE_USER’]; // utilise un mécanisme d’authentification $homedir = "/home/$username"; $file_to_delete = basename("$userfile"); // supprime le chemin excédentaire unlink ($homedir/$file_to_delete); $fp = fopen("/home/logging/filedelete.log","+a"); //note l’effacement $logstring = "$username $homedir $file_to_delete"; fputs ($fp, $logstring); fclose($fp); echo "$file_to_delete a été effacé!"; ?>
Cependant, même cette technique n’est pas sans faille. Si votre système d’identi fication permet aux utilisateurs de créer leur propre login, et qu’un utilisateur choisi le login « ../etc/ », le système est de nouveau exposé. Pour cette raison, vous pouvez essayer d’écrire un script renforcé : <?php $username = $_SERVER[’REMOTE_USER’];; $homedir = "/home/$username"; if (!ereg(’^[^./][^/]*$’, $username))
10.2 Sécurité des bases de données
die(’Erreur de nom de fichier’); // À ne pas traiter ?>
253
Suivant votre système d’exploitation, vous devrez protéger un grand nombre de fichiers, notamment les entrées de périphériques, (/dev/ ou COM1), les fichiers de configuration (fichiers /etc/ et .ini), les lieux de stockage d’informations (/home/, My Documents), etc. Pour cette raison, il est généralement plus sûr d’établir une politique qui interdit tout (absolument tout) sauf ce que vous autorisez.
10.2 SÉCURITÉ DES BASES DE DONNÉES
Aujourd’hui, les bases de données sont des composants incontournables des serveurs Web et des applications en ligne, qui fournissent du contenu dynamique. Des don nées secrètes ou critiques peuvent être stockées dans les bases de données : il est donc important de les protéger efficacement. Pour lire ou stocker des informations, vous devez vous connecter au serveur de bases de données, envoyer une requête valide, lire le résultat et refermer la connexion. De nos jours, le langage le plus courant pour ce type de communication est le langage SQL (Structured Query Language). Nous allons voir comment un pirate peut s’introduire dans une requête SQL. Notez que PHP ne peut pas protéger vos bases de données pour vous. Le chapitre suivant vous donnera des notions de base pour protéger vos bases de données, lors de la programmation de vos scripts. Gardez bien cette règle simple en tête : la défense se fait par couches. Plus vous ajouterez de tests pour protéger votre base, plus faible sera la probabilité de réussite d’un pirate. Ajoutez à cela un bon schéma de base de données, et vous aurez une application réussie.
10.2.1 Schéma de base de données
La première étape est de créer une base de données, à moins que vous ne souhaitiez utiliser une base de données déjà créée. Lorsque la base de données est créée, un utilisateur propriétaire en est responsable. Généralement, seul le propriétaire (et le « super utilisateur » ou « super admin ») peut intervenir avec les tables de cette base, et il faut que cette dernière donne des droits à tous les intervenants qui auront à travailler sur cette base. Les applications ne doivent jamais se connecter au serveur de bases de données sous le nom du propriétaire ou de l’administrateur, car ces utilisateurs ont des droits très importants, et pourront exécuter n’importe quelle requête, comme la modifica tion de tables, l’effacement de lignes ou même encore, la destruction de la base.
254
Chapitre 10. PHP : un langage sécurisé
Vous pouvez créer différents utilisateurs de bases de données pour chaque aspect de votre application, avec des droits limités aux seules actions planifiées. Il faut alors éviter que le même utilisateur dispose des droits de plusieurs cas d’utilisation. Cela permet que si des intrus obtiennent l’accès à la base avec l’un de ces jeux de droits, ils ne pourront pas affecter toute l’application.
Il est recommandé de ne pas implémenter toute la logique fonctionnelle dans l’application Web (c’estàdire dans vos scripts), mais d’en reporter une partie dans la base en utilisant les triggers, vues et règles. Si le système évolue, les nouvelles versions vous feront réécrire toute la logique et donc tous vos scripts. De plus, l’utilisation de trigger permet de gérer de manière transparente des données, et fournit des indications pour déboguer votre application.
10.2.2 Connexions au serveur de base de données
Il est recommandé d’établir des connexions au serveur avec le protocole SSL, pour chiffrer les échanges clients/serveur, afin d’améliorer la sécurité. Vous pouvez aussi utiliser un client SSH pour chiffrer la connexion entre les clients et le serveur de bases de données. Si l’une de ces deux protections est mise en place, il sera difficile de surveiller votre trafic et de comprendre les informations échangées.
Zoom sur SSH Le protocole SSH (abréviation de « Secure Shell ») est un protocole a été mis au point en 1995 par le Finlandais Tatu Ylönen. Il s’agit d’un protocole permettant à un client (un utilisateur ou bien une machine) d’ouvrir une session interactive sur une machine distante afin d’envoyer des commandes ou des fichiers de manière sécurisée. Les données circulant entre le client et le serveur sont chiffrées, ce qui garantit leur confidentialité (personne d’autre que le serveur ou le client ne peut lire les informations transitant sur le réseau). Il n’est donc pas possible d’écouter le réseau à l’aide d’un analyseur de trames. Le client et le serveur s’authentifient mutuellement afin d’assurer que les deux machines qui communiquent sont bien celles que chacune des parties croit être. Il n’est donc plus possible pour un pirate d’usurper l’identité du client ou du serveur (spoofing). Enfin, vous avez des logiciels à disposition, dont notamment OpenSSH, logiciel opensource, téléchargeable à cette adresse : http://www.openssh.com/fr/.
Un pour Un
Permettre à tous d'accéder à la lecture
Pour chaque accès à la bibliothèque, YouScribe donne un accès à une personne dans le besoin