iwannabeamaki (./20) :
./15 & ./16 : "signés"... dans l'URL tu veux dire ? au lieu d'avoir "forum=156" tu as "forum=sq6ZDs545dsf", et pareil pour chaque paramètre ? Pourquoi pas, mais c'est une sacré incitation à essayer de casser le code, et ça expose le mécanisme de sécurité à l'extérieur. Quand c'est possible d'éviter, j'aime autant
(et puis ça rend assez difficile de générer des requêtes côté client aussi, je sais que c'est censé ne jamais arriver, mais des fois ça rend bien des services ^^)
Je ne chiffre pas les adresses, je ne fais qu'ajouter une signature. Donc "truc.php?forum=156&taillepolice=2" devient "truc.php?sforum=156&ntaillepolice=2&s=sq6ZDS545dsf". Ici, le paramètre
forum est signé alors que la taille de la police ne l'est pas. Le module qui utilise
forum le cherchera dans la liste des paramètres signés alors que pour la taille de la police, ce sera dans la liste des paramètres non signés. Avant le chargement des modules, le moteur vérifie la signature avec les paramètres présents et refuse de charger la page en cas d'erreur. Comme ça, on est sûr de la validité des paramètres et qu'ils sont tous présents.
iwannabeamaki (./20) :
(je ne comprends pas bien pourquoi tu as tout englobé dans un seul paramètre "$args" en revanche ; c'est juste parceque c'est ta façon habituelle de structurer le code, ou il y a une raison liée au problème ?)
C'est pour ajouter un niveau d'abstraction. Ton module
topics peut ne pas connaître la liste des paramètres utilisés par le module
topics_liste. Ça permet de placer plusieurs modules sur une même page et de pouvoir les faire évoluer sans toucher au module de la page. Pour créer un lien avec certains paramètres, il faut les ajouter dans $args et générer l'adresse qui en reprend toutes les valeurs, ainsi les liens de tous les modules font recharger la même page lorsqu'on clique dessus (sauf les modifications du module lui-même), c'est pratique lorsque le JavaScript est désactivé. Lorsqu'un module termine une action unique (supprimer un message par exemple), il retire les paramètres de cette action de $args pour que les liens n'amènent pas à reproduire l'action.
Avec ce système, les modules ont une grande indépendance, mais en contrepartie, il faudra vérifier certains paramètres plusieurs fois (les modules ont chacun la responsabilité de leurs paramètres...). Ce qui pourrait être envisagé, ce serait de placer les paramètres dans une autre liste une fois qu'ils ont été vérifiés, les modules chercheraient dans cette liste avant de regarder dans la liste habituelle et d'en faire la vérification...