Joomla Days 2018 : CSP

1 1 1 1 1
Vote 4.67 (3 Votes)

Présentation CSP effectuée lors du "Lightning Talks Pro"  du 18 mai 2018


title: 'Joomla! et Content Security Policy (CSP)' created_time: '2018-03-15 15:05:11' language: en subtitle: ''

Joomla! et Content Security Policy (CSP)

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

Pascal Leconte (pmleconte)

Content Security Policy ?

  • Protection contre les attaques XSS
  • Contrôler les ressources chargées sur vos pages
  • Défini au niveau de votre serveur, dans .htaccess ou, aussi dans \<meta>
  • CSP idéal : on bloque tout ce qui ne nous appartient pas :
    Content-Security-Policy: default-src 'self'

Impact sur Joomla! et ses modules/plugins

  • Sortir CSS et JS du code PHP
  • Limiter les appels vers "l'extérieur"
    • Images
    • JS, CSS, ...

: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!\nThe 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 :

  • soit vous désactivez le cache : votre client est-il d'accord :grey_question:
  • soit, le code PHP n'étant pas rappelé quand on rafraîchit la page
    • :thumbsdown: perte des paramètres (Joomla.getOptions vide)
    • :point_right: Nécessite AJAX pour passer les paramètres entre JS et PHP.

: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