Ecrire une "Moulinette" - #3

Date : lundi 03 février 2014 @ 21:30:51 :: Sujet : Php, Mysql, ...

Précédemment, nous avons vu comment construire une moulinette de "dépannage"

Il s'agissait d'utiliser "à chaud" un outil permettant de réparer rapidement un petit dégât ou de faire une petite correction. Un commentaire nous a indiqué que cette méthode n'était pas la seule et que l'on pouvait aussi faire ce travail directement dans phpmyadmin.

Chaque méthode a ses avantages et, pour ma part, j'aime bien tester à blanc avant d'exécuter ce genre de script et je sauvegarde plutôt deux fois qu'une afin de revenir très rapidement en arrière si besoin est. C'est quand c'est chaud que ce genre d'intervention est le plus risqué. Et puis nous nous sommes volontairement placés dans un contexte d'hébergement gratuit.
D'ailleurs, nous ne tarderons pas à évoquer la sécurité :

- Sécurité des données: par exemple ne pas corrompre un champ avec une valeur impropre;
- Sécurité du site: en n'ouvrant pas une faille de sécurité.

De plus, il peut être intéressant de lancer des moulinettes non pas de dépannage mais de maintenance périodique (purge, correction, etc...)

Dans cette troisième étape, nous allons faire en sorte que notre moulinette soit un peu plus universelle. Le but est d'utiliser le même script pour modifier n'importe quelle valeur de n'importe quel champ de n'importe quelle table de la base de données. En plus, nous introduirons un paramètre qui permettra de faire un test "à blanc" (donc sans modification réelle).



Pour que le script soit universel, il convient de le coder pour qu'il réponde à une demande via l'url (toujours pour notre exemple de départ) de la forme :

http://monsite.com/moulinette.php?tabl=users&champ=storynum&val=20&ok=R


Notre script devient alors:

moulinette_4_4.jpg

 

 

moulinette_4_5.jpg

 

La partie importante se trouve à la ligne 14. Cet exemple, sans prétention, montre qu'il n'est pas besoin d'être Docteur es PHP pour se simplifier la tâche d'administrateur.

Evidement , le modèle ci-dessus a ses limites. Par exemple, si l'on veut conditionner la modification à la valeur précédemment contenue du champ, le code devient franchement moins universel car la requête sera :

$sql = sql_query(" UPDATE $tabl SET $champ = $val WHERE $val='10' ");

(Dans notre exemple, il s'agit de ne modifier que la valeur pré-déterminée par NPDS (10) et non pas les valeurs modifiées ensuite par les utilisateurs eux-même.=

Un autre aspect important de notre exemple ci-dessus ... c'est qu'il pose certains problème de sécurité.

Je propose de distinguer deux cas:

A) Moulinettes de correction ponctuelle:

Dans ce cas, je suis partisan du "one shot":

  1. je sauvegarde le contexte
  2. je télécharge le script
  3. j'exécute
  4. je contrôle le résultat
  5. s'il est mauvais je restaure la table
  6. Dans les deux cas, j'efface dans la foulée le script sur le site.

Enfin, dans cette hypothèse, je préfère coder en dur les éléments à modifier (table, champ et nouvelle valeur) : cela m'oblige à réfléchir à ce que je fais dans un moment souvent un peu "tendu".

 

B) Moulinette périodique de maintenance:

cette partie sera développée dans un prochain article qui montrera les dispositions indispensables en matière de sécurité.

 

A suivre donc ...








Cet article provient de NPDS

L'URL pour cet article est : http://www.npds.org/article.php?sid=1882