C’est un truc qui existe depuis des lustres dans le code de Dotclear, à savoir un petit bout de code pour vérifier que le fichier inclus est bien inclus proprement, c’est-à-dire au sein de l’application Dotclear. En général ça ressemble à ça :
if (!defined('DC_RC_PATH')) {
return false;
}
ou ça quand on est du côté de l’administration :
if (!defined('DC_CONTEXT_ADMIN')) {
return;
}
Maintenant on bascule de plus en plus sur une gestion par classe, voire même en incluant des espaces de nom et je me demande s’il est toujours utile, d’un point de vue sécurité, de prévoir ce petit bout de code avant la déclaration d’une classe dans un fichier PHP.
Imaginons que je sois un script kiddy et que j’arrive, d’une manière ou d’une autre parce que j’ai des supers pouvoirs de hacker, à placer quelque part sur le serveur visé un fichier dans lequel je vais inclure des bouts de Dotclear.
Qu’est-ce qui m’empêche, avant de faire un require
, de déclarer la constante DC_RC_PATH, ce qui rend du coup caduc le soit-disant code de protection ?
Rien !
En parcourant mes archives je découvre que j’en avais déjà causé ici même il y a quelques mois sans que ça ne défrise les foules !
Pour conclure, autant je peux comprendre l’usage du code pour l’administration, quoi que même dans ce cas c’est discutable pour la raison du script kiddy ci-dessus, autant pour le reste c’est franchement du code superflu, à mon humble avis de pas spécialiste du tout, mais sachant un peu !
Z’en dites quoi vous ?
1 De Nicolas -
Je suis du même avis que toi : je pense que ce p’tit bout de code ne sert à rien. Je pense qu’il pouvait être utile pour que ce fichier ne soit pas appelé directement et révéler des informations compromettantes.
2 De Jean-Christian Paul Denis -
Relique du passé que nous ne pouvons comprendre 😕
Sincèrement en 2023, avec classes est objets, avec les supers scripts de hack de la mort qui tue, je pense que ce genre de protection est illusoire et donc inutile.
Mais idem, je suis très loin d’être spécialiste de la chose.
3 De Franck -
Par contre l’usage de
DC_CONTEXT_ADMIN
est toujours utile pour différencier le contexte.