|
 |
CATEGORIE: Programmation
Articles présents dans cette catégorie
|
16 article(s) ont été trouvé(s).
|
|
|
|
|
permissions NTFS et AD en PHP
|
|
Il peut être utile dans l'optique de rajouter de la sécurité dans un script PHP de consulter les permissions
NTFS d'un répertoire avant d'y accéder. Microsoft fournit dans son ressource kit un outils en ligne de commande
nommé CACLS ( Télécharger ici ). Cet utilitaire est capable de lire les permissions NTFS :
Les utilisateurs ou groupes.
Le niveau de permission ( Aucun, lecture, écriture, modification, control total )
L'inconvénient dans une architecture de type domaine comportant des groupes et qu'il ne peut pas lister les
membres finaux ( utilisateurs ). Couplé à un requèteur LDAP, il est possible de connaitre pour chaque utilisateur
son niveau d'accès !
|
|
|
PHP LDAP Active Directory User browser
|
|
Dans les sociétés utilisant l'Active Directory de Microsoft il peut être intéressant
de lier les applications web php avec les comptes utilisateurs. Nous avons déja vu
comment utiliser les comptes du domaine pour authentifier les personnes ( voir l'article
Authentification en PHP via Active Directory )
Maintenant nous allons utiliser les fonctions LDAP de php pout mettre en place un browser
permettant de sélectionner des comptes du domaine et de les retourner à un formulaire
HTML ( afin d'en simplifier la saisie ).
|
|
|
Projection Sphérique en PHP d'une image Blue Marble
|
|
Il est possible de récupérer facilement depuis le site de la NASA des images de la terre
générées par le projet Blue Marble ( voir le site )
Ces images ont la particularité d'être dans un format 1/2 c'est à dire respectant le modèle de
projection -90° +90° de latitudes linéaires et -180° +180° de longitudes linéaires. Il est
difficile voir impossible de trouver des logiciels gratuits capable de projeter ces images
en 3 dimensions.
Blue Marble est un projet géré par la NASA qui vise à produire des images hautes
résolutions de la terre destinées à la recherche et au domaine public. Dès 2002, des
vues de la terre avec une résolution de 1km² par pixel étaient disponible. Aujourd'hui
la résolution a augmenté à 500m ² par pixel. Ces images sont traitées par les ordinateurs
de la NASA afin de supprimer la polution liée aux nuages, zones sombres, réflexions liées à la
neige,...
Grace à quelques fonctions mathématiques de bases ( cosinus & sinus ) il est possible
de dessiner en utilisant la librairie GD une projection de la terre en pseudo 3D. Pseudo
car l'image dessinée est en effet plate et obéis à de la géométrie en deux dimensions.
|
|
|
PHP et GD courbes bezier multi-layers
|
|
Il est possible de créer des images complexes en utilisant la librairie GD 2.0 disponible dans PHP. La
génération d'images à la volée permet de facilement mettre en valeur des données contenues dans une
base de données. De nombreux modules gratuits permettant de créer des graphiques sont disponibles
sur internet ( JPGraph par exemple ).
En utilisant les fonctionnalitées de GD comme la transparence ou les images truecolors
il est possible d'obtenir un rendus exceptionnel en JPG,GIF ou PNG.
En ajoutant une dimension mathématique comme les courbes de bézier, il est encore possible d'améliorer
la représentation graphique. L'exemple suivant est un script qui accepte en entrée un tableau à deux dimensions, la
première contient les données, la deuxième contient un TimeStamp :
|
|
|
Enumération des process via SNMP en PHP
|
|
Grace à SNMP, il est facile de faire des applications capable d'interroger à distance les ressources de machines
afin de faire du monitoring actif. Pour comprendre comment configurer PHP afin de supporter l'extension
SNMP, regardez cet article : Utilisation de SNMP en PHP. Les OS modernes ( Windows, Linux ) possèdent des agents SNMP facilement installable
et configurable implémentant de base un certain nombre de compteurs ( hors propriétaires ). La branche host (.iso.org.dod.internet.mgmt.mib-2.host )
de la MIB ( Management Information Base ) contient un grand nombre de compteurs très utiles pour
l'administration, par exemple :
hrSystem : Des informations générales.
hrStorage : La description et l'utilisation des disques.
hrDevice : Les composants internes de la machine ( CPU, PCI,.. )
hrSWRun : La liste des process
hrSWRunPerf : L'utilisation CPU / Mémoire des process
hrSWInstalled : Les applications installées
L'exemple suivant permet collecter des informations relatives aux process exécutés. Il met le résultat ( Nom du fichier,
Chemin d'accès, Temps CPU, Mémoire utilisée ) dans le tableau $Data. Ne pas confondre temps CPU et utilisation CPU, le temps CPU correspond
à la durée pendant laquelle le process a utilisé de manière exclusive le/les processeurs.
|
|
|
Utilisation de SNMP en PHP
|
|
Le module SNMP fournit avec PHP est plutôt méconnus, il permet pourtant de développer des scripts de monitoring
très puissant! SNMP ( Simple Network Management Protocol ) est un protocole qui a vu
le jour en 1988 ( voir la RFC 1067 puis
RFC 1157 ), il est aujourd'hui très largement
intégré dans tous les équipements possédant des interfaces réseaux. Service natif dans Microsoft Windows ( il n'est
pas installé de base, mais présent dans les composants additionels ), il se trouve aussi pour linux sous la forme
de la librairie NetSNMP. Les agents SNMP plus
ou moins évolués permettent d'obtenir des statistiques comme :
Le trafic réseau.
L'utilisation des ressources ( CPU, Mémoire, Disques... )
La température des composants
Des informations particulières à l'équipement
...
L'interrogation de l'agent SNMP se fait via un code d'authentification échangé de façon clair dans SNMPv1
ou cryptée depuis la version 3.
|
|
|
PHP-CLI ( Command Line Interface )
|
|
PHP-CLI pour Command Line Interface permet d'exécuter des scripts en PHP depuis la ligne
de commande DOS ou Shell. L'intéret d'un tel mode d'exécution est simple, il est possible de programmer
directement en PHP des programmes que nous pourrons exécuter de façon planifiés ( chose impossible
en PHP web ) ou également des scripts ne nécessitant pas de faire un retour dans le navigateur web.
PHP est un puissant langage de programmation. Il est possible de modifier la durée maximum d'exécution
d'un script avec la commande set_time_limit(0); qui définis un temps maximum
d'exécution du script infinis ( Il est néanmoins possible de l'arrêter en faisant Ctrl+C ). Les auteurs de PHP ont bien compris la portée
de PHP-CLI, en effet cette directive est implicite depuis la version 5.0 de PHP.
Avec l'adjonction des modules fournis de base avec l'environnement
il devient possible de créer des applications faisant appel à :
GD pour la création d'images.
PDFLib pour la création de fichiers PDFs.
SNMP pour l'interrogation d'équipements réseaux.
IMAP pour la lecture de boites aux lettres.
...
Utilisé en ligne de commande PHP donne accès à de nouvelles variables : STDIN/STDOUT/STDERR que nous pouvons
ouvrir comme des flux avec la fonction fopen ou encore $argc et $argv[] qui permettent de récupérer
les paramètres passés au script par la ligne de commande.
|
|
|
Authentification en PHP via Active Directory
|
|
Il peut être utile d'inclure une authentification Active Directory dans vos applications PHP. En utilisant
le module LDAP fournis de base dans les distributions de PHP, il est possible de tester l'existance d'un
utilisateur et son mot de passe. Les étapes d'authenfication via LDAP sont les suivantes :
On force une erreur 401 pour faire apparaitre la fenêtre de login.
On se connecte au serveur LDAP. ( Controleur de domaine )
On tente un Bind avec le login / mdp de l'utilisateur.
On vérifie le code de retour LDAP.
Si l'utilisateur est authentifié, la variable $auth_user contiendra son UserID dans le format
Domain\UserID. Si l'authentification échoue, on redirige l'utilisateur vers la page NotAllowed.php.
Par défaut Internet Explorer proposera 3 tentatives de login, cette valeur ne peut être changée coté
script.
Le module LDAP se base sur certaines DLL de OpenSSL qui sont incluses dans les version de PHP inférieur à 4.2.0, pour les version
supérieurs, Vous devrez probablement télécharger OpenSSL et copier libeay32.dll et
ssleay32.dll dans le path de windows. Pour activer l'extension LDAP dans PHP, il est nécessaire
de décommenter la ligne suivante de votre fichier PHP.ini :
extension=php_ldap.dll
Ce petit exemple force l'apparition d'une boite d'authentification sur le navigateur en lui envoyant
une erreur HTTP 401. Il tente ensuite une connection au serveur LDAP ( généralement un controleur de
domaine Active Directory ), si le BIND avec les variables PHP_AUTH_USER / PHP_AUTH_PW ( variables remplies
par la boite de login ) est réussit, l'utilisateur est authentifié, sinon il est redirigé vers une autre
page.
A la mode depuis quelques temps déja, l' Ajax ( Asynchronous JavaScript and XML ) permet
de rendre les pages HTML beaucoup plus dynamique en y incluant des résultats de requètes externe sans recharger
le contenus de la page entièrement. Utilisé abondament dans le web2.0 il est aujourd'hui grandement compatible
avec les navigateurs les plus utilisés.
Ce petit exemple permet d'envoyer une chaine à un script externe situé sur un serveur et afficher
en retour le résultat. Nous verrons plus tard comment enrichir les données renvoyées par le serveur.
Tout se passera évidement sans recharger la page dans le navigateur.
|
|
|
PHP et mod_rewrite, réécriture d'URL
|
|
Afin d'augmenter la visibilité d'un site sur internet via les moteurs de recherche, il peut être intéressant de faire appel à
une fonction d'Apache appelée mod_rewrite. Ce module qui n'est pas nativement activé permet de faire de la redirection
d'URL de façon transparente pour le browser ou en renvoyant un code HTTP 302 -Object Moved-. Outre le fait de n'utiliser que
des URL propres ( sans paramètres &x=y?a=z ), l'indexation des moteurs de recherche est facilitée, en effet certains
n'accèdent pas aux adresses comportant trop de paramètres.
Ce tutorial a été réalisé sur un serveur web apache 2.0, la démarche est légèrement différente pour une 1.3x. La configuration
décrite ci-dessous est appliquée sur le serveur web ou est hébergé ce site, vous pouvez le voir en action en sélectionnant un
article, une catégorie, le flux RSS,...
|