Planète

Par flocondetoile
Adhérent

Faire une requête SQL sur plusieurs tables avec Drupal 8

Drupal 8 fournit une API, avec EntityQuery, qui simplifie de manière significative l'écriture de requêtes SQL pour récupérer et lister un ensemble de contenus. Ainsi il est très facile de récupérer une liste de contenus selon des critères et des conditions complexes, sans avoir besoin de connaître précisément les tables et leur syntaxe pour chaque champ associé à une entité. Mais nous pouvons avoir besoin de recourir à des requêtes plus complexes nécessitant d'associer des données issues de plusieurs tables.

Par ftorregrosa
Adhérent
Florent Torregrosa

Résumé des Drupal Dev Days 2018

Du 2 au 6 juillet ont eu lieu les Drupal Dev Days de 2018. Cette année, ils avaient lieu à Lisbonne où 404 participants ont pu se retrouver pour assister à des keynotes, sessions, bofs et sprinter.

Voici un résumé des sessions auxquelles j'ai assisté et des sujets sur lesquels j'ai sprinté.

Sprints

Entity share

J'ai pu consacrer du temps à faire avancer Entity share :

  • test de bugs signalés

  • merge de patchs

Tags: 
Par ftorregrosa
Adhérent
Florent Torregrosa

Mise à jour du plugin Composer drupal-l10n

Dans un article précédent Télécharger des traductions Drupal avec Composer, j'avais présenté une extension Composer pour télécharger des traductions Drupal.

Désormais cette extension est dans le groupe Github drupal-composer https://github.com/drupal-composer/drupal-l10n.

Tags: 
Par ftorregrosa
Adhérent
Florent Torregrosa

Réorganisation de mes images Docker et mise en place builds automatisés

Hier, j'ai réorganisé mes images Docker. Cet article va résumer les changements et expliquer pourquoi de telles modifications.

C'est un commentaire d'Ines Wallon à propos du fait que le hub Docker peut être paramètré pour construire les images Docker automatiquement qui a déclenché cette réorganisation.

Tags: 
Par flocondetoile
Adhérent

Basculer de Google Maps vers Leaflet et OpenStreetMap avec Geolocation sur Drupal 8

Le 2 mai 2018 Google a annoncé un changement de politique majeure concernant l'utilisation de ses services en ligne, et dont notamment son célèbre service de cartographie GoogleMaps et toutes ses API associées, pour embarquer ou générer des informations géolocalisées. Ce changement de politique rend désormais payant un service auparavant disponible gratuitement dans certaines limites de quota. Il est donc temps de cesser d'utiliser ces solutions, par habitude ou par facilité, et d'aller voir ce qui se fait très bien aussi ailleurs. Regardons comment sur Drupal 8 nous pouvons basculer sur une solution open source basée sur Leaflet et OpenStreetMap.

Par flocondetoile
Adhérent

Alerte de sécurité critique - Drupal core PSA-2018-003

L'équipe de sécurité de Drupal vient de publier ce jour, lundi 23 avril 2018, un bulletin d'alerte (Drupal 7 and 8 core critical release on April 25th, 2018 PSA-2018-003) annonçant la publication prochaine d'une mise à jour de sécurité critique. Cette mise à jour de sécurité sera publiée et diffusée le mercredi 25 avril entre 16h00 et 18h00 UTC (soit entre 18h et 20h heure française). Soit après-demain. Les 2 versions en cours de Drupal (Drupal 7 et Drupal 8) sont concernées par cette annonce.

Par flocondetoile
Adhérent

Mettre en place un contrôle de stock simple avec Drupal Commerce 2

Si nous ne disposons pas (encore) d'une solution contribuée (commerce_stock devrait être prochainement être disponible), Drupal Commerce 2 dispose d'ores et déjà d'une API pour mettre en place un contrôle des stocks, avec le service Availability Manager. Découvrons comment mettre en place un contrôle de stock très simple, basé sur un champ (par exemple field_stock) qui aura été ajouté sur un produit.

Par Kgaut
Kevin Gautreau

Drupal 8 - Entité - Champ de base Fichier (File)

Voici comment créer un champ « fichier » au sein d'un type d'entité custom dans drupal 8 :

  1. $fields['programme_pdf'] = BaseFieldDefinition::create('file')
  2. ->setLabel(t('Programme PDF'))
  3. ->setSetting('file_directory', 'formations/programme') // dossier d'upload
  4. ->setSetting('max_filesize', '10MB') // taille max du fichier
  5. ->setSetting('file_extensions', 'pdf') // extensions autorisées, à séparer par un espace
  6. ->setSetting('description_field', FALSE) // si on veut activer un champ « description »
  7. ->setDisplayOptions('form', [
  8. 'label' => 'hidden',
  9. 'type' => 'file_generic',
  10. 'weight' => 4,
  11. ])
  12. ->setDisplayConfigurable('form', TRUE)
  13. ->setDisplayConfigurable('view', TRUE);

 

Par admin

Préparer la mise à jour critique Drupal 6/7/8 du 28/03/2018

Le 21/03/2018, la Security Team de Drupal a annoncé dans son "Public Service
Announcement" PSA-2018-001
la sortie imminente de versions de sécurité pour Drupal, le mercredi 28/03/2018.

De telles préannonces sont particulièrement rares, la précédente remontant à la
faille d'injection SQL "Drupalgeddon" de novembre 2014, et sont réservées aux
mises à jour les plus critiques.

Sévérité / Criticité

En temps normal, la couverture de sécurité est limitée aux versions supportées,
qui sont actuellement la version courante (8.5.x) et la précédente (7.x).

Fait inhabituel là aussi, la mise à jour du 28 couvre également les versions
obsolètes 8.3.x et 8.4.x, et un patch a également été annoncé sur le projet
D6LTS pour une mise à jour équivalente sur Drupal 6.x, alors que son support est
terminé depuis le 24/02/2016, ce qui renforce le niveau de risque estimé de la
faille que corrigent ces mises à jour, et l'importance de les appliquer dans les
meilleurs délais.

Quand agir ?

Mais quels sont ces délais, précisément ? Selon le bulletin PSA-2018-001, les
"exploits" de la faille révélée par le correctif pourraient être développés dans
les "heures ou jours qui suivent" la publication.

En 2014, la faille Drupalgeddon avait commencé à être exploitée dans les 6 heures
qui avaient suivi la publication du correctif. Avec l'élévation progressive du
niveau de risque des agresseurs, tout permet de supposer que le délai pourrait
être encore plus court cette fois.

La Security Team annonce une publication des correctifs mercredi entre 18:00
et 20:30 UTC, soit 20:00-21:30 heure de Paris, du fait de l'heure d'été.

Une marge de sécurité de 6 heures, comme celle dont ont bénéficié les sites en
2014, mène donc au mieux à 03:30 jeudi matin, et au pire 02:00. Dans tous les
cas, une mise à jour le jeudi matin 29/03 court donc un risque important
d'arriver trop tard.

En résumé: préparez votre équipe à une intervention dans la nuit de mercredi
à jeudi.

Stratégie de mise à niveau

Selon le bulletin PSA-2018-001 et les compléments du project D6LTS, la
stratégie recommandée est la suivante:

  • Sites sous drupal 8.5.x ou 7.x: appliquer la version de sécurité publiée
    dans ce correctif selon la procédure standard.
  • Sites sous Drupal 8.4.x: appliquer immédiatement la version 8.4.x qui sera
    publiée dans ce correctif, puis planifier une mise à jour vers la plus
    récente version 8.5.x de sécurité, annoncée pour le mois d'avril.
  • Sites sous Drupal 8.3.x: appliquer immédiatement la version 8.3.x qui sera
    publiée dans ce correctif, puis planifier une mise à jour vers la plus
    récente version 8.5.x de sécurité, annoncée pour le mois d'avril.
  • Sites sous Drupal/Pressflow 6.x avec un contrat de support auprès de l'un
    des prestataires du programme commercial D6LTS: suivre les recommandations
    spécifiques de ce programme.
  • Sites sous Drupal/Pressflow 6.x sans contrat D6LTS: télécharger le patch
    disponible sur
    https://www.drupal.org/project/issues/d6lts
    et l'appliquer au site avec les commandes de patch standard.

Les versions exactes à utiliser pour les mises à jour seront indiquées lors
de la publication du correctif.

Ces mises à jour de sécurité ne modifieront pas le schéma de base de données
par rapport à la dernière version actuellement disponible sur chacune des
branches concernées.

Attention sur les sites utilisant 8.3.x/8.4.x, le rapport du module
update sur le tableau de bord d'administration disponible sur
/admin/reports/status indiquera une mise à jour recommandée vers
une release 8.5.x plutôt que vers la version de sécurité 8.3.x/8.4.x, mais
compte tenu des évolutions entre les versions 8.3/8.4/8.5, ceci présente un
risque d'effets de bord non souhaités, et il est donc préférable d'appliquer les
mises à jour indiquées par le bulletin de sécurité plutôt que celles indiquées
par le site, afin de pouvoir plus sereinement préparer la mise à jour en 8.5.x
pour avril 2018.

Tactique de déploiement

Si votre équipe ou prestataire a d'ores et déjà choisi une stratégie, mieux
vaut l'appliquer qu'improviser au dernier moment: ce sont ceux qui sont les
mieux placés pour connaître les contraintes d'exploitation de votre site.

A défaut, quatre principales tactiques sont envisageables pour ce déploiement.
Les détails dépendent évidemment de vos processus de déploiement et, le cas
échéant, de ceux de l'agence ou infogérant en charge de votre site. Cela étant
dit, les grandes lignes tactiques sont les suivantes, et commençent AVANT la
publication du bulletin:

  1. Avant l'après-midi de mercredi 26, mettre à jour le site à la dernière
    version courante sur la branche concernée: 8.3.x, 8.4.x, 8.5.x. Ne pas
    tenter à ce stade une mise à jour précipitée vers 8.5.x
    , pour éviter toute
    situation problématique à la veille d'une mise à jour de sécurité critique
  2. En fin d'après-midi du 26, préparer une sauvegarde intégrale du/des
    serveurs, par exemple un snapshot disque. En effet, si un exploit vient à
    être réalisé avant la fin du déploiement du correctif, seule une
    restauration intégrale de l'infrastructure - par opposition à une
    restauration de Drupal seul - permettra de garantir l'absence de maliciel
    sur les serveurs. S'assurer que cette sauvegarde est terminée pour 20:00,
    heure de publication annoncée au plus tôt
  3. Dès la publication, télécharger le patch s'il est disponible, ou la version
    complète recommandées sinon, et en extraire un patch.
  4. Appliquer immédiatement le patch en production. Cela permet de fermer la
    faille après seulement quelques minutes de vulnérabilité, avec un niveau de
    risque fonctionnel des plus limités puisque les sites auront été mis au
    dernier niveau de correction de bogues avant mercredi (cf premier point). Si
    cette étape n'est pas appliquée, par exemple du fait de règle interdisant les
    mises à jour en production dans un processus industrialisé certifié, passer
    immédiadatement au point suivant, sinon la suite des opérations peut attendre
    jeudi matin pour travailler dans de bonnes conditions.
  5. Intégrer la nouvelle version complète au projet, et lui faire passer la
    suite de tests sur l'environnement de recette/préproduction. Une fois la version
    validée, la déployer. Fin de l'incident.
  6. Si le patch a été déployé dès le début, le niveau de risque est très faible,
    et le déploiement peut être réalisé sur les serveurs en l'état. Si l'étape
    du patch a été omise et que la nouvelle mise en production a été réalisée
    moins de 4h après la publication de la version de sécurité, le risque demeure
    faible. Mais si, en l'absence de patch, la mise en production a attendu
    jusqu'au jeudi matin, il est préférable de réaliser un nouveau cliché des
    serveurs, puis de restaurer la version de la veille et de lui appliquer la
    nouvelle version avant de revenir en ligne. Le cliché du matin pourra alors
    être examiné pour rechercher des traces d'éventuelles tentatives d'intrusion
    durant la période de vulnérabilité.
  7. Si les contraintes organisationnelles ne permettent pas de réaliser les
    étapes précédentes, la méthode la plus prudente consiste à mettre le site
    hors ligne mercredi juste avant 20:00, avec une page statique signalant le
    caractère volontaire/prudentiel de cette interruption de service, et ne le
    remettre en ligne qu'une fois la nouvelle version déployée le lendemain
  8. S'il n'est possible ni de suivre les procédures de mise à jour rapides
    précédentes, ni de mettre le site hors ligne jusqu'à la correction, le plus
    raisonnable sera de considérer que le site est susceptible d'avoir été
    exploité, donc réaliser une sauvegarde intégrale des serveurs et des serveurs
    de logs (journaux) disponible, avant de redéployer sur des machines vierges
    ou sur la sauvegarde de la veille la version corrigée, puis de procéder à un
    audit visant à identifier si une pénétration a effectivement eu lieu. A ce
    stade, la présentation
    Mon site est hacké, que faire ?
    pourra vous être utile

Pour plus d'informations

La Security Team pas plus qu'aucune tierce partie ne peut communiquer plus
d'informations jusqu'à la publication des correctifs.

L'annonce du correctif sera publiées sur https://www.drupal.org/security, sur
Twitter, et par courriel pour les abonnés à la liste de diffusion de la Security
Team, à laquelle il est possible de s'abonner en allant sur sa page de profil
sur https://drupal.org (pas sur https://drupal.fr), et en se rendant sur
l'onglet My newsletters pour s'abonner à cette liste de diffusion.

Les journalistes intéressés par plus d'informations sur les développements
de ce sujet sont invités à contacter directement
security-press@drupal.org
pour obtenir une version centrée sur leurs préoccupations. La Security Team
publiera un courriel résumé à destination de la presse en même temps que la
publication du code et du bulletin de version associé.

Licence Creative Commons

Cet article, créé par OSInet est mis
à disposition selon les termes de la
Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 3.0 France.
pour faciliter la diffusion de l'information de sécurité de Drupal.

En page d'accueil : 
Version de Drupal : 
Par flocondetoile
Adhérent

Alerte de sécurité critique - Drupal core PSA-2018-001

L'équipe de sécurité de Drupal a publié mercredi 21 mars 2018 un bulletin d'alerte annonçant la publication prochaine d'une mise à jour de sécurité hautement critique. Cette mise à jour de sécurité critique sera publiée et diffusée le mercredi 28 mars à partir de 18h00. Les 2 versions en cours de Drupal (Drupal 7 et Drupal 8) sont concernées par cette annonce. Tenez vous prêt à mettre à jour votre ou vos projets Drupal, 7 ou 8.

Par Kgaut
Kevin Gautreau

Drupal - Création d'une table dans une base secondaire

Voici comment créer une table dans une base de donnée autre que celle par défaut.

Code à mettre dans votre MODULE.install

Le principe : création d'un « HOOK_schema fake » et utilisation des HOOK_install et HOOK_uninstall pour créer / supprimer cette table en sélectionnant la bonne base.

Le code est pour drupal 8 mais il peut facilement être adapté pour drupal 7.

  1.  
  2. use \Drupal\Core\Database\Database;
  3.  
  4. function MODULE_schema_autre_db() {
  5. $schema['users'] = [
  6. 'description' => 'Members informations',
  7. 'fields' => [],
  8. 'primary key' => ['id'],
  9. ];
  10.  
  11. $schema['users']['fields']['id'] = [
  12. 'description' => 'ID',
  13. 'type' => 'serial',
  14. 'not null' => TRUE,
  15. 'unsigned' => TRUE,
  16. ];
  17.  
  18. $schema['users']['fields']['uid'] = [
  19. 'description' => 'Drupal ID',
  20. 'type' => 'int',
  21. 'not null' => TRUE,
  22. 'unsigned' => TRUE,
  23. ];
  24.  
  25. $schema['users']['fields']['mail'] = [
  26. 'type' => 'varchar',
  27. 'length' => 255,
  28. ];
  29. return $schema;
  30. }
  31.  
  32.  
  33. function MODULE_install() {
  34. Database::setActiveConnection('NOM_DB');
  35. $schema = MODULE_schema_autre_db();
  36. foreach ($schema as $name => $table) {
  37. Database::getConnection()->schema()->createTable($name, $table);
  38. }
  39. Database::setActiveConnection();
  40. }
  41.  
  42. function MODULE_uninstall() {
  43. Database::setActiveConnection('NOM_DB');
  44. $schema = MODULE_schema_autre_db();
  45. foreach ($schema as $name => $table) {
  46. Database::getConnection()->schema()->dropTable($name);
  47. }
  48. Database::setActiveConnection();
  49. }

 

 

Par Kgaut
Kevin Gautreau

Drupal 8 & Search API - effectuer une requête dans le code

Avec Drupal et Drupal 8 encore plus la recherche passe la plupart du temps par Search API, une interface qui se branche devant plusieurs moteur de base de données (SolR, ElasticSearch, Database...)

Le plus souvent on va faire nos pages de résultats de recherche à l'aide de Views (et du module Search views pour Drupal 7). Mais dans certains cas on va vouloir avoir plus la main sur la recherche et donc aller interroger Search API directement dans le code.

Initialisation de la requête

Chargement de l'index (ici, le nom machine est « contenu »)

  1. // Chargement de l'index « contenu »
  2. $query = Index::load('contenu')->query();

Définition de la requête recherchée

Terme sur lesquels vont être effectués la requête.

  1. // On lancer la recherche sur « hello world »
  2. $query->keys("hello world");

Mode de la requête

  1. // Les différentes possibilités sont
  2. // - « direct » => Requête directe
  3. // - « terms » => Multiple words
  4. // - « phrase » => Single phrase
  5. $parse_mode = \Drupal::service('plugin.manager.search_api.parse_mode')->createInstance('direct');
  6.  
  7. // Optionnellement, on peut choisir un opérateur spécifique (OR ou AND)
  8. $parse_mode->setConjunction('OR');
  9.  
  10. // Affectation du mode de la requête
  11. $query->setParseMode($parse_mode);

Définitions des champs sur lesquels rechercher

Évidement c'est optionnel, par défaut la recherche se fera sur l'ensemble des champs « fulltext » contenus dans l'index.

  1. // Recherche uniquement sur le champ « body »
  2. $query->setFulltextFields(['body']);
  3.  
  4. // Recherche uniquement sur les champs « body » et « title »
  5. $query->setFulltextFields(['body', 'title']);

Ajout de conditions supplémentaires

L'objet retourné par Index::load('contenu')->query(); est une query classique drupal, sur laquelle on peut effectuer les traitement classique que l'on peut faire sur n'importe quelle Query drupal8.

À noter ici que le nom des champs doit être celui que l'on renseigne dans l'index, ils peuvent être différents des noms des champs définis dans nos types de contenu.

Quelques exemples en vrac :

Condition sur un champ boolean

  1. // le champ private doit être « TRUE »
  2. $query->addCondition('private', TRUE);

Condition sur un champ « varchar »

  1. // on veut que le contenu retourné soit un article ou un snippet
  2. $query->addCondition('type', ['article', 'snippet'], 'IN');

Condition sur un champ date

À noter le format de date à utiliser : "Y-m-d\TH:i:s\Z"

  1. $btf = \DateTime::createFromFormat('d/m/Y', '21/10/2015');
  2. $date_formatted = $btf->format("Y-m-d\TH:i:s\Z")
  3.  
  4. // Date de création de l'article > date définie
  5. $query->addCondition('created', $date_formatted, '>');
  6.  
  7. // Et l'inverse
  8. $query->addCondition('created', $date_to, ');

Pagination

Gestion de la pagination identique à une requête classique

  1. // Récupération des 20 premiers résultats.
  2. $query->range(0, 20);

Exécution de la requête et récupération des résultats

  1. $results_set = $query->execute();
  2.  
  3. //Nombre de résultats retournés
  4. $nb_results = $results_set->getResultCount()
  5.  
  6. // Récupération des entités
  7. foreach ($results_set->getResultItems() as $item) {
  8. $resultat = $item->getOriginalObject()->getValue();
  9. }

Sources

Pas trouvé grand chose sur le sujet à part cette page dans la documentation sur drupal.org : https://www.drupal.org/docs/8/modules/search-api/developer-documentatio…

Si vous avez d'autres liens pouvant aider, je suis preneur.

Par Kgaut
Kevin Gautreau

Drupal 8 - Entité - Champ de base « link » (lien / URL)

Pour créer un champ de base de type lien, dans la définition de votre entité :

  1. $fields['mon_lien'] = BaseFieldDefinition::create('link')
  2. ->setLabel(t('Path'))
  3. // valeurs possible : LinkItemInterface::LINK_EXTERNAL ou LinkItemInterface::LINK_GENERIC
  4. ->setSetting('link_type', LinkItemInterface::LINK_GENERIC)
  5. //Activer ou non le titre
  6. ->setSetting('title', DRUPAL_DISABLED)
  7. ->setDisplayOptions('form', [
  8. 'type' => 'link_default',
  9. 'weight' => 0,
  10. ])
  11. ->setDisplayConfigurable('form', TRUE);

 

Par Kgaut
Kevin Gautreau

Drupal 8 - Domain Access - récupérer le domaine courant

Voici comment récupérer le domaine actif quand on utilise le module Domain Access pour Drupal 8 :

  1. $current_domain = \Drupal::service('domain.negotiator')->getActiveDomain();

Pour récupérer le domaine par défaut :

  1. $default_domain = \Drupal::service('domain.negotiator')->loadDefaultDomain();

 

Par Kgaut
Kevin Gautreau

Drupal 8 - Afficher un webform où l'on veut via le code

Pour récupérer et retourner un webform où l'on veut via le code (que ce soit dans un bloc, un controller...) on peut utiliser les lignes suivantes :

  1. // Ici, « contact » est le nom machine de mon webform
  2. $webform = \Drupal::entityTypeManager()->getStorage('webform')->load('contact');
  3. return $webform->getSubmissionForm();

 

Par Kgaut
Kevin Gautreau

Drupal 8 - Générer un lien de « flagging » dans le code

Voici comment générer un lien pour « flaguer » une entité avec drupal 8 et le module flag :

  1. $type_entite_a_flaguer = 'user';
  2. $id_entitee_a_flaguer = $user->id();
  3. $id_du_flag = 'follow_user';
  4.  
  5. $f = \Drupal::service('flag.link_builder');
  6. $link = $f->build($type_entite_a_flaguer, $id_entitee_a_flaguer, $id_du_flag);

vous pourrez alors utiliser le lien dans un template en faisant par exemple :

  1. {{- link -}}

 

Par Kgaut
Kevin Gautreau

Drupal 8 - Entité - Champ de base « Nombre Décimal »

Le type nombre décimal peut-être pratique pour stocker tout nombre à virgule (un prix par exemple).

Voici comment attacher une propriété « nombre décimal » à un type d'entité personnalisé.

  1. $fields['prix'] = BaseFieldDefinition::create('decimal')
  2. ->setLabel(t('Prix'))
  3. ->setSetting('unsigned', TRUE)
  4. ->setSetting('scale', 2)
  5. ->setSetting('min', 0)
  6. ->setSetting('suffix', '€ TTC')
  7. ->setRequired(TRUE)
  8. ->setDisplayOptions('form', array(
  9. 'type' => 'number',
  10. 'weight' => 5,
  11. ))
  12. ->setDisplayConfigurable('form', TRUE)
  13. ->setDisplayConfigurable('view', TRUE);

 

Par Kgaut
Kevin Gautreau

Drupal 8 - Menu - Ajouter un élément de menu avec des paramètres GET

Voici comment créer un Menu item (élément de menu) avec des paramètres GET.

Pour cela on utilise le fichier MON_MODULE.links.menu.yml (à noter que cela marchera aussi dans les fichiers MON_MODULE.links.action.yml et MON_MODULE.links.task.yml)

  1. formations.element:
  2.   title: 'Mon titre de menu'
  3.   weight : 2
  4.   route_name: view.front_formations.page
  5.   menu_name: menu-formation
  6.   options:
  7.   query:
  8.   label: 'prise-de-vue'
  9.   cat: 2

Ici l'url aura comme « query string » : ?label=prise-de-vue&cat=2

Pour rappel la clé menu_name attend le nom du menu dans lequel on veut placer l'élément de menu que l'on vient de définir.

Par Kgaut
Kevin Gautreau

Drupal - PSA-2018-001 - Patch de sécurité déployé le 28/03/2018

Il vient d'être annoncé par l'équipe gérant la sécurité du CMS drupal qu'un gros correctif de sécurité pour drupal 7 et drupal 8 sera déployé mercredi 28/03/2018 entre 19h et 20h30 (heures Françaises).

On ne sait pas encore où se situe la faille. On sait seulement qu'elle semble (très) importante et qu'il est recommandé d'appliquer le patch immédiatement.

La dernière fois qu'un cas similaire s'est présenté, une fois le correctif disponible, les sites non patchés ont été très rapidement piratés. En effet : une fois que l'on a accès au patch, il est facile de trouver la faille corrigée et ainsi de l'exploiter sur des sites non protégés.

Si vous êtes développeur ou si vous gérez vos propres sites drupal, prévoyez une permanence mercredi soir pour vous occuper de ça.

Si vous avez un site drupal qui est géré par un tiers, assurez-vous qu'il soit au courant et qu'il s'en occupera au plus tôt.

Encore une fois, les versions 7 et 8 de drupal sont concernées.

Plus d'informations : https://www.drupal.org/psa-2018-001

 

 

Pages