Optimisation et sécurisation de Pluxml
Bonjour,
Pour faire simple, j'ai fait quelques recherches sur le forum afin d'optimiser Pluxml.
Et je suis tombé sur ce sujet.
https://forum.pluxml.org/discussion/3892/optimisation-page-en-cache-et-css-js-minifie-concatene-compresse
Du coup, j'ai crée un fichier class.plx.headers.php que j'ai placé dans le dossier "core/lib"
Pour l'appeler j'ai rajouté une ligne dans l'index à la racine de Pluxml
On inclut les librairies nécessaires
include(PLX_CORE.'lib/class.plx.headers.php');
Après je me suis interessé à la sécurité afin d'obtenir la meilleur note possible sur
https://securityheaders.com/
Donc j'y ai rajouté quelques lignes à ajuster celui vos besoins.
<?php
/**
* Classe plxHeaders responsable de la securité du site
*
* @package PLX
* @author Websteph
**/
header_remove("x-powered-by");
header_remove("Pragma");
header("Content-Type: text/html; charset=utf-8");
header("Accept-Encoding: gzip");
header("Strict-Transport-Security: max-age=31536000; includeSubDomains; preload");
header("X-Frame-Options: SAMEORIGIN");
header("X-Content-Type-Options: nosniff");
header("X-XSS-Protection: 1; mode=block");
header("Referrer-Policy: strict-origin-when-cross-origin");
header("Content-Security-Policy: default-src 'none'; manifest-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; font-src 'self' data:; connect-src 'self'; media-src 'none'; object-src 'none'; frame-src 'self'; frame-ancestors 'none'; form-action 'self'; base-uri 'self';");
header("Permissions-Policy: accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()");
$lastModified=filemtime(__FILE__);
$etagFile = md5_file(__FILE__);
$etag = dechex(fileinode(__FILE__));
$etag.= "-".dechex(filesize(__FILE__));
$etag.= "-".dechex(((filemtime(__FILE__).str_repeat("0",6)+0) & (8589934591)));
$ifModifiedSince=(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? $_SERVER['HTTP_IF_MODIFIED_SINCE'] : false);
$etagHeader=(isset($_SERVER['HTTP_IF_NONE_MATCH']) ? trim($_SERVER['HTTP_IF_NONE_MATCH']) : false);
$expire_offset = 60 * 60;
header("Expires: ".gmdate("D, d M Y H:i:s", time() + $expire_offset)." GMT");
header("Last-Modified: ".gmdate("D, d M Y H:i:s", $lastModified)." GMT");
header("Etag: W/\"$etag\"");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Vary: Negotiate, Accept-Encoding");
if (@strtotime($_SERVER["HTTP_IF_MODIFIED_SINCE"])==$lastModified || $etagHeader == $etagFile)
{
header("HTTP/1.1 304 Not Modified");
exit;
}
?>
Alors maintenant je sais pas si j'ai utilisé la meilleur méthode pour parvenir à mes fins, mais ça fonctionne très bien.
Mais pour moi, c'était surtout important d'optimiser et sécuriser mon Pluxml.
Stéphane
Réponses
Bonjour,
Il y a beaucoup de headers qui peuvent se paramétrer au niveau du serveur, soit dans un fichier .htaccess, soit dans la configuration du "virtual host" si on a la main sur la configuration du serveur.
Ne pas mélanger les headers envoyés par le navigateur et par le serveur :
Par exemple, header("Accept-Encoding: gzip") est envoyé par le navigateur.
Pour limiter les échanges entre navigateur et serveur, on peut paramétrer la durée du cache. Pour une feuille de style CSS, on peut mettre 24 heures. Il n'y a que le fichier index.php qui peut varier souvent.
Pour avoir une idée des échanges entre navigateur et serveur, on peut utiliser le débogueur de Firefox ou de Chrome en cliquant sur l'onglet réseau puis le fichier téléchargé.
Pour la durée de vie du cache, Apache sait faire :
https://httpd.apache.org/docs/2.4/fr/mod/mod_cache.html
NGinx aussi :
https://wiki.pluxml.org/docs/install/nginx.html
Accès à mon dépôt de plugins et thèmes
installe PluXml plus vite que ton ombre avec kzInstall2
J'ai fait une petite mise à jour de mon fichier class.plx.headers.php comme me l'a suggéré Bazooka. et je lui ai rajouté une petite Fonction pour générer un Nonce aléatoire pour mon Script de commentaire. ici
Je précise que celui ci est prévu pour un site en HTTPS mais vous pouvez commenter la ligne Strict-Transport-Security, si c'est pas votre cas.