Joomla! et Content Security Policy (CSP)

Comment rendre vos modules/plugins Joomla! compatibles CSP...

Pascal Leconte (pmleconte)

1. Content Security Policy

  Content-Security-Policy: default-src 'self'

2. Impact sur Joomla! et ses modules/plugins

⚠ Attention : supprimer les styles dans les DIV, mais aussi dans les articles : fini par exemple les commandes style="text-align: justify;" générés par les éditeurs....

👉 Passage des paramètres entre le module et sa librairie JS en utilisant la commande PHP addScriptOptions et son équivalent JS Joomla.getOptions

3. Version simple

Pour un module mono-copie qui n’est pas inclus dans un article

3.1. le PHP

$document->addScriptOptions('mod_module',
    array('cookie_duration' => $params->get('cookie_duration', 0),
            'showpreview' => $params->get('showpreview', 'true'),
            'noimage' => JText::_('NOIMAGE'))
    );

3.2. le Javascript associé

if (typeof Joomla = 'undefined'
        || typeof Joomla.getOptions = 'undefined') {
    console.error('Joomla.getOptions not found!\n
                    The Joomla core.js file is not being loaded.');
}
options = Joomla.getOptions('mod_module');
if (typeof options === 'undefined' ) { // cache Joomla problem
    console.error('mod_module.getOptions not found!');
}

4. Les tips and tricks

👉 Surveiller les erreurs dans la console de votre explorateur

👉 Joomla! et son cache : Module dans un article :

⚠ Attention si votre module est multi-instances, cela se complique...

👉 Petite remarque complémentaire: au niveau sécurité, il est conseillé de faire “disparaître” le mot Joomla de vos pages. Or, la commande addScriptOptions va créer un script avec une classe joomla-script-options.

Par exemple, sur une de mes pages, j’ai :

<script type="application/json" class="joomla-script-options new">{...}}</script>

5. Les erreurs dans la console

CSP_erreurs

6. Références