Python/Hacking 2
Terminal Linux & PHP — mini labo de serveur web
Ici on mélange ligne de commande (Linux) et PHP côté serveur :
droits sur les fichiers, renommage, cookies, sessions, compteur de visites…
Public : ~12 → 18 ans (mais accessible dès qu’on est curieux)
Excellent support de TP pour classes & ateliers web
1) Droits sur les fichiers (Linux)
Sur un serveur Linux, chaque fichier a des droits : lecture (r), écriture (w), exécution (x), pour 3 catégories :
- u = user (propriétaire du fichier)
- g = group (groupe)
- o = others (les autres utilisateurs)
Pour voir les droits d’un fichier :
$ ls -l
-rw-r--r-- 1 www-data www-data 1200 index.php
drwxr-xr-x 2 www-data www-data 4096 images/
Exemple de lecture : -rw-r--r-- signifie :
- r w - pour le propriétaire
- r - - pour le groupe
- r - - pour les autres
a) Modifier les droits : chmod
Quelques commandes classiques :
# Donner au propriétaire lecture/écriture, aux autres lecture
$ chmod 644 index.php
# Donner exécution au propriétaire (script)
$ chmod u+x script.sh
# Tout le monde peut lire et exécuter, seul le propriétaire peut écrire
$ chmod 755 dossier/ -R # -R = récursif (dans tout le dossier)
b) Modifier le propriétaire / groupe
# Changer le propriétaire
$ sudo chown www-data index.php
# Changer propriétaire et groupe
$ sudo chown www-data:www-data -R /var/www/mon-site
test.txt, affiche ses droits (ls -l),
puis joue avec chmod pour le passer en 600, 644, 755
et observe la différence.
2) Chiffrement / déchiffrement (encryption)
Chiffrer un fichier = le rendre illisible sans une clé. On l’utilise pour protéger des mots de passe, des sauvegardes, etc.
a) Exemple simple avec openssl
Sur un Linux avec OpenSSL installé :
# Chiffrement (mot de passe demandé)
$ openssl enc -aes-256-cbc -salt -in secret.txt -out secret.txt.enc
# Déchiffrement (il faut retaper le même mot de passe)
$ openssl enc -d -aes-256-cbc -in secret.txt.enc -out secret-dechiffre.txt
Ici on utilise un algorithme connu (AES-256-CBC). Ce n’est pas un jeu : perdre le mot de passe = fichier perdu.
⚠ À expliquer clairement aux élèves : on ne chiffre pas n’importe quoi sur un vrai serveur de production sans comprendre ce que l’on fait.
3) Manipuler fichiers et dossiers dans le terminal
a) Savoir “où on est” : pwd
pwd = print working directory (affiche le dossier courant) :
$ pwd
/home/eleve/mon-projet
b) Renommer un fichier / répertoire avec mv
Le même outil sert à renommer et à déplacer :
# Renommer un fichier
$ mv ancien_nom.txt nouveau_nom.txt
# Renommer un dossier
$ mv ancien_dossier nouveau_dossier
c) Déplacer un fichier dans un autre dossier
# Déplacer rapport.txt dans le dossier /home/eleve/docs
$ mv rapport.txt /home/eleve/docs/
# Déplacer tous les .php dans le dossier public
$ mv *.php public/
d) Autres commandes utiles
# Lister le contenu du dossier
$ ls
$ ls -l # avec détails
# Changer de dossier
$ cd /var/www
$ cd .. # remonter d'un niveau
# Copier un fichier
$ cp index.php index.bak.php
⚠ rm supprime. Sur un serveur, on NE donne pas de
rm -rf aux débutants sans explications…
4) Un peu de PHP côté serveur
PHP s’exécute sur le serveur. On peut y stocker des infos en session, compter les visites, manipuler des fichiers, gérer des cookies, etc.
a) Créer une variable de session
Une session = un “sac à dos” côté serveur, lié à une visite. On peut y stocker le pseudo, l’ID de l’élève, etc.
<?php
session_start(); // toujours AU DÉBUT du script
// On enregistre une variable en session
$_SESSION['pseudo'] = 'Alice';
// Plus tard, dans la même session :
echo 'Bonjour ' . $_SESSION['pseudo'];
?>
session_start() doit être appelé
avant tout affichage HTML (avant tout <html> ou
echo), sinon PHP râle.
b) Compter les visites et les afficher
Exemple : un fichier compteur.txt qui contient un nombre
de visites pour la page.
<?php
session_start();
$fichier = 'compteur.txt';
// 1. Créer le fichier s'il n'existe pas encore
if (!file_exists($fichier)) {
file_put_contents($fichier, '0');
}
// 2. Lire la valeur actuelle
$visites = (int) file_get_contents($fichier);
// 3. Incrémenter
$visites++;
// 4. Réécrire dans le fichier
file_put_contents($fichier, (string)$visites);
// 5. Afficher
echo "Nombre de visites : " . $visites;
?>
Ce compteur est volontairement simplifié (pas de gestion fine des accès concurrentiels), mais suffisant pour un atelier.
c) La superglobale $_SERVER
$_SERVER contient tout un tas d’informations sur la requête :
IP du client, navigateur, URL demandée, etc.
<?php
echo 'Ton IP : ' . $_SERVER['REMOTE_ADDR'] . "<br>";
echo 'User-Agent : ' . $_SERVER['HTTP_USER_AGENT'] . "<br>";
// Pour explorer toutes les variables :
foreach ($_SERVER as $cle => $valeur) {
echo $cle . ' => ' . $valeur . "<br>";
}
?>
REMOTE_ADDR, REQUEST_URI,
HTTP_HOST, etc., et explique en français à quoi ils servent.
d) Créer un fichier s’il n’existe pas
Très proche du compteur : on teste file_exists(), puis on crée.
<?php
$chemin = 'notes-eleves.txt';
if (!file_exists($chemin)) {
// Création du fichier avec un texte d'initialisation
file_put_contents($chemin, "Fichier créé le " . date('Y-m-d H:i:s') . "\n");
}
echo "Le fichier '$chemin' est prêt à être utilisé.";
?>
e) Cookies : créer, lire, supprimer
Un cookie est une petite information stockée dans le navigateur de l’utilisateur. C’est pratique pour mémoriser un thème (clair/sombre) ou un pseudo.
Créer un cookie
<?php
// Crée un cookie "theme" = "sombre" valable 30 jours
setcookie(
'theme',
'sombre',
time() + 60*60*24*30,
'/' // chemin (tout le site)
);
?>
Lire un cookie
<?php
if (isset($_COOKIE['theme'])) {
echo "Ton thème préféré est : " . $_COOKIE['theme'];
} else {
echo "Aucun thème enregistré pour l'instant.";
}
?>
Supprimer un cookie
<?php
// Pour supprimer un cookie, on lui met une date d'expiration dans le passé
setcookie('theme', '', time() - 3600, '/');
?>
setcookie() doit être appelé avant tout affichage HTML,
sinon le cookie ne sera pas envoyé.
QCM Terminal & PHP
Coche une réponse par question, puis clique sur “Vérifier mes réponses”.
Commentaires
Enregistrer un commentaire