Véritable partenaire technique et stratégique en infogérance WordPress.

Pour site vitrine, page de capture, WooCommerce (Woo), site membre.

Exemple de configuration NGINX pour SecuPress 2.3

Voici un exemple provisoire (étude en cours) pour appliquer les recommandations SecuPress.
Sauvegarder le contenu dans un fichier /etc/nginx/conf.d/secupress.conf car ce fichier doit être chargé dans le context « http » de NGINX.

Les variables ne sont calculées que si nécessaire. Par exemple, quand la configuration d’un site appelle la variable $REDIRECT_PHP404, c’est seulement à ce moment-là que les calculs sont faits.

J’ai ajouté une ligne pour ouvrir l’accès au fichier lock.php du plugin memberpress qui permet de faire du contrôle d’accès à des téléchargements de fichier.

				
					# Default value
map '' $REDIRECT_PHPTYPE {
    default '';
}

# FOLDERS case and php FILES case
map "$REDIRECT_PHPTYPE:$request_uri" $REDIRECT_PHP404_CHECK1 {
    default 0;
    "~*:/\.well-known/" 0;
    "~*(D|F):/secupress-sandbox-" 0;
    "~D:/?(\?|$)" 0;
    "~*D:/wp-admin(/(?:\?.*)?)?$" 0;
    "~D:.*" folders;
    "~*F:/(index|wp-activate|wp-comments-post|wp-cron|wp-links-opml|wp-load|wp-login|wp-mail|wp-pass|wp-signup|wp-trackback|xmlrpc)\.php(\?|$)" 0;
    "~*F:/wp-admin/(about|admin-ajax|admin-footer|admin-post|admin|async-upload|authorize-application|comment|contribute|credits|customize|edit-comments|edit-form-advanced|edit-form-blocks|edit-form-comment|edit-link-form|edit-tag-form|edit-tags|edit|erase-personal-data|export-personal-data|export|freedoms|import|index|link-add|link-manager|link|load-scripts|load-styles|maint/repair|media-new|media-upload|media|moderation|ms-admin|ms-delete-site|ms-edit|ms-options|ms-sites|ms-themes|ms-upgrade-network|ms-users|my-sites|nav-menus|network/about|network/admin|network/contribute|network/credits|network/edit|network/freedoms|network/index|network/plugin-editor|network/plugin-install|network/plugins|network/privacy|network/profile|network/settings|network/setup|network/site-info|network/site-new|network/site-settings|network/site-themes|network/site-users|network/sites|network/theme-editor|network/theme-install|network/themes|network/update-core|network/update|network/upgrade|network/user-edit|network/user-new|network/users|network|options-discussion|options-general|options-media|options-permalink|options-privacy|options-reading|options-writing|options|plugin-editor|plugin-install|plugins|post-new|post|press-this|privacy-policy-guide|privacy|profile|revision|site-editor|site-health|term|theme-editor|theme-install|themes|tools|update-core|update|upgrade|upload|user/about|user/admin|user/credits|user/freedoms|user/index|user/privacy|user/profile|user/user-edit|user-edit|user-new|users|widgets-form-blocks|widgets-form|widgets)\.php(\?|$)" 0;
    "~*F:/wp-includes/js/tinymce/wp-tinymce\.php(\?|$)" 0;
    "~*F:/wp-content/plugins/memberpress/lock\.php(\?|$)" 0;
    "~*0:F:/wp-content/.*\.php(\?|$)" content;
    "~*F:.*\.php(\?|$)" files;
    "~*:.*\.php(\?|$)" files;
}

# EXTS case
map "$REDIRECT_PHP404_CHECK1:$REDIRECT_PHPTYPE:$request_uri" $REDIRECT_PHP404 {
    default 0;
    "~folders:.*:.*" folders;
    "~files:.*:.*" files;
    "~content:.*:.*" content;
    "~*0:F:.*\.(jpg|jpeg|jpe|gif|png|bmp|tiff|tif|webp|avif|ico|heic|heif|heics|heifs|asf|asx|wmv|wmx|wm|avi|divx|flv|mov|qt|mpeg|mpg|mpe|mp4|m4v|ogv|webm|mkv|3gp|3gpp|3g2|3gp2|txt|asc|c|cc|h|srt|csv|tsv|ics|rtx|css|htm|html|vtt|dfxp|mp3|m4a|m4b|aac|ra|ram|wav|x-wav|ogg|oga|flac|mid|midi|wma|wax|mka|rtf|js|pdf|class|tar|zip|gz|gzip|rar|7z|psd|xcf|doc|pot|pps|ppt|wri|xla|xls|xlt|xlw|mdb|mpp|docx|docm|dotx|dotm|xlsx|xlsm|xlsb|xltx|xltm|xlam|pptx|pptm|ppsx|ppsm|potx|potm|ppam|sldx|sldm|onetoc|onetoc2|onetmp|onepkg|oxps|xps|odt|odp|ods|odg|odc|odb|odf|wp|wpd|key|numbers|pages|php|ai|eps|ttf|otf|ott|woff|woff2|eot|svg|md|log|xml|xsl)(\?|$)" 0;
    "~*0:F:.*" exts;
}

				
			

Puis ajouter l’autre partie dans le context « server » du site internet, pas dans un context « location » car l’idée est de pouvoir appliquer à la fois au php et aux fichiers statics :

				
					# BEGIN SecuPress bad_url_access
if (-d $request_filename) {
    set $REDIRECT_PHPTYPE D;
}
if (-f $request_filename) {
    set $REDIRECT_PHPTYPE F;
}
if ($REDIRECT_PHP404 != 0) {
    rewrite ^ /wp-content/plugins/secupress-pro/free/data/404-handler.php?secupress_bad_url_access__ID=$REDIRECT_PHP404&secupress_bad_url_access__URL=$request_uri last;
}
# END SecuPress

# WORDPRESS
location / {
    # BEGIN SecuPress directory_listing
    autoindex off;
    # END SecuPress

    # BEGIN SecuPress php_disclosure
    if ( $query_string ~* "\=PHP[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" ) {
        return 403;
    }
    # END SecuPress

    try_files $uri $uri/ /index.php?$args;
}
				
			

Actuellement, le fichier 404-handler.php retourne une erreur 404 (ce qui est normal a priori) mais le scan du module ne détecte pas correctement le fait qu’on a bien intercepté les erreurs 404 sur les fichiers php qui n’existent pas.

Peut-être avez-vous autre chose à faire ?

Chacun son métier.

Nous proposons des hébergements infogérés pour votre WordPress (serveur d’hébergement + infogérance WordPress). L’optimisation de la vitesse et la sécurité sont de la partie.

Nous vous proposons donc de nous contacter ou de suivre un de nos prochains Webinar en ligne pour voir comment travailler ensemble.

Webinar le 18 septembre : « Les 3 secrets pour gérer, booster et sécuriser parfaitement votre WordPress »