L'astérisque (*) signale
une solution dépendante de la configuration du
serveur.
Comment
sécuriser l'upload de fichiers ?
Exemple de code comportant des failles de sécurité :
<?
if(!$userfile && $userfile != "none") { //il peut s'agir d'une simple chaîne de caractères
copy($userfile, $userfile_name);//risque d'écrasement et de déplacement de fichier n'importe où
}
?>
Le même code sécurisé :
<?
if(is_uploaded_file($userfile)) { //vérifie qu'il s'agit d'un fichier téléchargé et non d'une simple chaîne
if(!file_exists("/upload/$userfile")) { //contrôle une tentative d'écrasement de fichier
move_uploaded_file($userfile, "/upload");//déplace le fichier téléchargé // dans un répertoire protégé
}
?>
Vous devez également contrôler le type et l'extension du fichier. Un
script php (ou autre) peut contenir des commandes de suppression de
fichiers !
A noter : l'upload de fichier n'est
pas sécurisé avec php3.
Comment générer
du code javascript à la volée ?
Crée un tableau
javascript multi-dimensionnel à partir d'un tableau PHP également multi-dimensionnel :
Il suffit d'ouvrir un socket sur le port 43
d'un serveur Whois ("Qui est-ce ?" en anglais) et de lui passer cette
requête : "votre_nom_de_domaine", puis de lire le résultat ligne par ligne
avec la fonction fgets, exactement comme
on le ferait avec un fichier. Serveurs Whois
: whois.networksolutions.com, whois.internic.fr,
whois.afnic.fr...
Comment
retrouver le nom d'hôte correspondant à une adresse IP* ?
<? echo "Le nom d'hôte correspondant à votre adresse IP $REMOTE_ADDR est : " .gethostbyaddr($REMOTE_ADDR) ?>
Affiche : Le nom d'hôte correspondant à votre adresse IP 62.147.160.232
(nas-cbv-9-62-147-160-232.dial.proxad.net) est :
nas-cbv-9-62-147-160-232.dial.proxad.net
Comment
supprimer les antislashs d'une chaîne ?
PHP échappe systématiquement les caractères
sensibles provenant des GPC (GetPostCookie) avec un antislash (\) pour des
raisons de sécurité. Pour retrouver le texte d'origine, utilisez stripslashes() :
<?
$str = "\'\\\""; //équivalent d'une chaîne provenant des GPC
echo stripslashes ($str);
?>
Affiche : '\"
Comment échapper
les caractères spéciaux dans un formulaire ?
Si le navigateur ne trouve pas la balise de
fin >, il n'affichera pas le champ
texte. C'est pourquoi il est nécessaire d'encoder les caractères qui ont
une signification spéciale en HTML.. Même remarque pour ".
Comment supprimer
un cookie appartenant à votre domaine ?
Il suffit de le remplacer par un autre de même nom, vide et avec
une date passée. Vous ne pouvez pas supprimer un cookie envoyé par un
autre domaine que le votre.
<?
setcookie ("session_id", md5 (uniqid (rand())), time()+3600); //cookie envoyé pour une session // d'1 heure
setcookie ("session_id", "",-1); //suppression du cookie de session
?>
Comment effectuer
une redirection avec des paramètres ?
Les paramètres doivent être encodés. De plus, l'url doit être
absolue, car certains navigateurs ne savent pas interpréter les
redirections avec des urls relatives.
Vous pouvez utiliser PHP indépendamment du navigateur, par exemple
si vous avez un script qui consomme beaucoup de ressources et que pour
cette raison vous souhaitiez en faire une page HTML statique. Créez (sur
Windows) un script batch (extension .bat) sur ce modèle :
@echo off
c:\php\php.exe -q c:\web\quotations.php > c:\web\quotations.html
L'option -q désactive l'envoi du type MIME (par défaut text/html,
inutile ici puisque destiné au navigateur). Une page "quotations.html"
sera créée dans le répertoire racine à partir du script "quotations.php".
Notez que les variables d'environnement ne sont pas disponibles dans cette
utilisation. De plus, PHP doit être exécutable.
Comment
récupérer le nom d'utilisateur avec une authentification par htaccess* ?
Grâce à la variable d'environnement $PHP_AUTH_USER Attendez-vous cependant à ce
que sa soeur $PHP_AUTH_PW soit vide dans
la plupart des cas pour d'évidentes raisons de sécurité.
Comment supprimer
l'extension d'un nom de fichier ?
L'upload de fichier, l'envoi de mail en boucle, un transfert FTP
prennent parfois plus de 30 secondes, qui est la durée de vie maximale
d'un script par défaut. La fonction set_time_limit() permet de modifier cette
valeur (exprimée en secondes). Est désactivée quand PHP est installé en
safe_mode.
<?
set_time_limit(500); //fixe un délai maximum d'exécution de 500 secondes soit 3 minutes.
?>
Comment retrouver
la valeur hexadécimale d'un caractère ?
<?
echo dechex(ord("a")); //encode tous les caractères
echo str_replace("%","",rawurlencode("é@")); //encode seulement les caractères spéciaux
?>
Comment retrouver
le nom d'un fichier à partir du chemin complet ?