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
Exercice : sur un serveur de test, crée un fichier 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.

Idée TP : donner un petit fichier texte avec un message secret, demander aux élèves de le chiffrer, puis d’échanger les fichiers et les mots de passe pour les déchiffrer.

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'];
?>
À retenir : 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>";
}
?>
Exercice : affiche uniquement quelques champs utiles : 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, '/');
?>
Rappel important : comme pour les sessions, 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”.

  1. 1. Quelle commande affiche le dossier dans lequel on se trouve ?


  2. 2. La commande mv monfichier.txt nouveau.txt sert à…


  3. 3. En PHP, à quoi sert session_start() ?


  4. 4. Quel est le bon moyen de créer un fichier s’il n’existe pas encore ?


  5. 5. Pour supprimer un cookie en PHP, on…


Commentaires

Posts les plus consultés de ce blog

Basthon.fr

mBot2 - programmation mBlock/python

Mario Kart 2D