J'ai souvent vu des personnes dire de ne pas utiliser de filtres PHP / PHP personnalisés (à partir de l'interface utilisateur de Drupal) dans des blocs, des nœuds, des vues, des règles, etc. J'ai un peu cherché et je n'ai pas trouvé grand chose, il semble que C’est une pratique recommandée par Drupal que tous «connaissent».
Je comprends que cela pose un risque potentiel pour la sécurité, en particulier aux utilisateurs finaux ou aux nouveaux utilisateurs de Drupal ou de PHP, mais en tant que développeur / constructeur de site, quelles sont les vraies raisons de ne pas utiliser du PHP personnalisé à partir de l'interface utilisateur de Drupal?
Réponses:
Certaines raisons:
Il pourrait y avoir plus de raisons, mais ça devrait suffire :)
la source
require_once $_SERVER['DOCUMENT_ROOT'].'/sites/all/themes/myTheme/php/stuff.php';
et écrire le reste du code dans votre éditeur de texte / IDE. Parfois ce n'est pas un travail facile ou cela prendrait beaucoup de temps de créer son propre module, même en tant que bon développeur PHP. Un petit exemple: Actions conditionnelles Ubercart. Mais il est vrai que garder notre code en base de données n’est pas une bonne chose.Ce code est difficile à déboguer et à maintenir. Je ne connais aucun moyen d'utiliser le contrôle de version pour ce type de code php.
Et c'est vraiment un risque de sécurité potentiel pour les personnes novices dans Drupal ou PHP,
la source
En considérant le cas du filtre PHP utilisé dans un nœud, la raison pour ne pas l'utiliser est que vous limitez le nombre d'utilisateurs pouvant éditer ce nœud, si vous ne souhaitez pas autoriser tous les utilisateurs à utiliser le filtre PHP.
Plutôt que d'utiliser le filtre PHP, il est préférable d'utiliser un module personnalisé qui remplace du texte spécifique dans le contenu du nœud par le résultat du code qu'il exécute (sans utiliser
eval()
), ou qui ajoute son propre texte au contenu du corps des nœuds. Dans ce cas, n'importe quel utilisateur peut éditer le nœud sans avoir l'autorisation d'ajouter du code PHP arbitraire qui est ensuite exécuté par le filtre PHP.En règle générale, il est préférable d'éviter,
eval()
car cela réduit la lisibilité du code, la possibilité pour vous de prédire le chemin d'accès du code (et les éventuelles implications en termes de sécurité) avant l'exécution, et donc la possibilité de déboguer le code.En dehors d'un site de développement ou de test, je n'activerais pas le filtre PHP ni n'utiliserais du code PHP transmis
eval()
.Le filtre PHP a été supprimé de Drupal 8. Il s'agit désormais d' un module tiers , non couvert par la stratégie de sécurité . C'est probablement une raison de plus pour ne pas l'utiliser dans les serveurs de production (si les raisons déjà données ne vous ont pas convaincu).
la source
Pour résoudre les divers problèmes spécifiés ci-dessus - difficulté de maintenance du code, de contrôle de version, de recherche d'erreur, vous avez cette possibilité légèrement "klugey":
Créez des fonctions (nommez-les soigneusement, en fonction de ce qu'elles font) dans un fichier toujours inclus - si vous avez un module personnalisé que vous écrivez pour le site, c'est un excellent endroit pour mettre ces fonctions. Le php que vous entrez alors est simplement:
return my_specialfunc($somevar);
-$somevar
ici potentiellement l'objet nœud sur lequel vous avez travaillé, ou quelles que soient les autres variables pertinentes ici.Je trouve que je veux toujours toujours la flexibilité, à certains endroits, d'appeler mon propre code. En utilisant cette technique, la maintenance du code est simple puisqu'il s'agit simplement de modifier la fonction dans le fichier. La détection des erreurs est facile car la fonction apparaîtra dans une trace.
Notez cependant que cela ne résout pas les problèmes de sécurité potentiels. Celles-ci dépendent en grande partie de la sécurité du noyau Drupal. En général, le code contenant une base de données est souvent le talon de sécurité des achillées. Les fonctionnalités utilisant du code contenant une base de données ont tendance à être beaucoup plus exposées à l'exploitation et la sécurité qui les entoure doit être extrêmement étroite. Cependant, Drupal a généralement bien maîtrisé la sécurité de ces problèmes: ils ont été résolus, puis corrigés / résolus rapidement avec de nouvelles versions.
la source
Voici la raison de la vulnérabilité de sécurité pour éviter de donner cette autorisation à vos utilisateurs si vous ne souhaitez pas que vos utilisateurs non-administrateurs modifient directement la base de données.
Piratage des informations d'identification de la base de données Drupal
la source
Plutôt que de faire quelque chose du genre
return functionname($object)
, il serait préférable d'utiliser le système de jetons / filtres dans la mesure du possible. Il existe des modules tels que Insert View et Embed Node qui peuvent aider dans des situations courantes dans lesquelles des personnes souhaitent intégrer PHP dans des corps de nœuds ou de blocs.la source
Vous devez vous soucier de la portabilité de vos données. Que se passe-t-il si vous migrez vos nœuds de Drupal 7 vers Drupal 8 et que le corps de certains nœuds en contient
<?php whatever_function_that_does_not_exist_anymore(); ?>
?Ne pensez pas à votre projet dans les 5 mois mais dans les 5 ans. Les mises à jour, les bonnes pratiques et la portabilité sont des aspects importants de tout bon projet informatique à mon avis.
Utiliser aussi peu de modules que possible est également un aspect de cela.
la source