Joomla! et Content Security Policy (CSP)

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

Pascal Leconte (pmleconte)

Content Security Policy

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

Impact sur Joomla! et ses modules/plugins

:warning: 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....

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

Version simple

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

le PHP

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

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!');
}

Les tips and tricks

:point_right: Surveiller les erreurs dans la console de votre explorateur

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

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

point_right: 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>

Les erreurs dans la console

CSP_erreurs

Références