diff --git a/ecrire/bootstrap/globals_config.php b/ecrire/bootstrap/globals_config.php new file mode 100644 index 0000000000000000000000000000000000000000..463072f18b7e2eb7faaa30f4464c672510d06599 --- /dev/null +++ b/ecrire/bootstrap/globals_config.php @@ -0,0 +1,212 @@ +<?php + +/** + * Globales (historiques) de config au démarrage de SPIP + */ + +global + $auteur_session, + $connect_id_rubrique, + $connect_statut, + $connect_toutes_rubriques, + $controler_dates_rss, + $cookie_prefix, + $debut_date_publication, + $derniere_modif_invalide, + $dossier_squelettes, + $exceptions_des_tables, + $filtrer_javascript, + $formats_logos, + $hash_recherche_strict, + $hash_recherche, + $help_server, + $home_server, + $ignore_auth_http, + $ignore_remote_user, + $ip, + $ldap_present, + $liste_des_authentifications, + $liste_des_etats, + $liste_des_statuts, + $meta, + $mysql_rappel_connexion, + $mysql_rappel_nom_base, + $nombre_de_logs, + $plugins, + $puce, + $source_vignettes, + $spip_matrice, + $spip_pipeline, + $spip_sql_version, + $spip_version_affichee, + $spip_version_base, + $spip_version_branche, + $spip_version_code, + $surcharges, + $table_date, + $table_des_tables, + $table_prefix, + $table_primary, + $table_titre, + $tables_auxiliaires, + $tables_jointures, + $tables_principales, + $taille_des_logs, + $test_i18n, + $tex_server, + $traiter_math, + $type_urls, + $url_glossaire_externe, + $visiteur_session, + $xhtml, + $xml_indent; + +# comment on logge, defaut 4 tmp/spip.log de 100k, 0 ou 0 suppriment le log +$nombre_de_logs = 4; +$taille_des_logs = 100; + +// on peut definir _LOG_FILTRE_GRAVITE dans mes_options.php + +// Prefixe des tables dans la base de donnees +// (a modifier pour avoir plusieurs sites SPIP dans une seule base) +$table_prefix = 'spip'; + +// Prefixe des cookies +// (a modifier pour installer des sites SPIP dans des sous-repertoires) +$cookie_prefix = 'spip'; + +// Dossier des squelettes +// (a modifier si l'on veut passer rapidement d'un jeu de squelettes a un autre) +$dossier_squelettes = ''; + +// Pour le javascript, trois modes : parano (-1), prive (0), ok (1) +// parano le refuse partout, ok l'accepte partout +// le mode par defaut le signale en rouge dans l'espace prive +// Si < 1, les fichiers SVG sont traites s'ils emanent d'un redacteur +$filtrer_javascript = 0; +// PS: dans les forums, petitions, flux syndiques... c'est *toujours* securise + +// Type d'URLs +// inc/utils.php sélectionne le type 'page' (spip.php?article123) en l'absence +// d'autre configuration stockée en $GLOBALS['meta']['type_urls] +// Pour les autres types: voir urls_etendues +// $type_urls n'a plus de valeur par défaut en 3.1 mais permet de forcer une +// configuration d'urls dans les fichiers d'options. + +#la premiere date dans le menu deroulant de date de publication +# null: automatiquement (affiche les 8 dernieres annees) +# 0: affiche un input libre +# 1997: le menu commence a 1997 jusqu'a annee en cours +$debut_date_publication = null; + +// Pour renforcer la privacy, recopiez-la ligne +// dans le fichier config/mes_options): SPIP ne pourra alors conserver aucun +// numero IP, ni temporairement lors des visites (pour gerer les statistiques +// ou dans spip.log), ni dans les forums (responsabilite) +# $ip = substr(md5($ip),0,16); + +// faut-il faire des connexions Mysql rappelant le nom de la base MySQL ? +// (utile si vos squelettes appellent d'autres bases MySQL) +// (A desactiver en cas de soucis de connexion chez certains hebergeurs) +// Note: un test a l'installation peut aussi avoir desactive +// $mysql_rappel_nom_base directement dans le fichier inc_connect +$mysql_rappel_nom_base = true; + +// faut-il afficher en rouge les chaines non traduites ? +$test_i18n = false; + +// faut-il ignorer l'authentification par auth http/remote_user ? +$ignore_auth_http = false; +$ignore_remote_user = true; # methode obsolete et risquee + +// Invalider les caches a chaque modification du contenu ? +// Si votre site a des problemes de performance face a une charge tres elevee, +// vous pouvez mettre cette globale a false (dans mes_options). +$derniere_modif_invalide = true; + +// +// Serveurs externes +// +# Serveur de documentation officielle +$home_server = 'https://www.spip.net'; +# glossaire pour raccourci [?X]. Aussi: [?X#G] et definir glossaire_G +$url_glossaire_externe = 'https://@lang@.wikipedia.org/wiki/%s'; + +# TeX +$tex_server = 'https://math.spip.org/tex.php'; +# MathML (pas pour l'instant: manque un bon convertisseur) +// $mathml_server = 'http://arno.rezo.net/tex2mathml/latex.php'; + +// Produire du TeX ou du MathML ? +$traiter_math = 'tex'; + +// Appliquer un indenteur XHTML aux espaces public et/ou prive ? +$xhtml = false; +$xml_indent = false; + +$formats_logos = ['jpg', 'png', 'svg', 'gif', 'webp']; + +// Controler les dates des item dans les flux RSS ? +$controler_dates_rss = true; + +// +// Pipelines & plugins +// +# les pipeline standards (traitements derivables aka points d'entree) +# ils seront compiles par la suite +# note: un pipeline non reference se compile aussi, mais uniquement +# lorsqu'il est rencontre +// https://programmer.spip.net/-Les-pipelines- +$spip_pipeline = []; + +# la matrice standard (fichiers definissant les fonctions a inclure) +$spip_matrice = []; +# les plugins a activer +$plugins = []; // voir le contenu du repertoire /plugins/ +# les surcharges de include_spip() +$surcharges = []; // format 'inc_truc' => '/plugins/chose/inc_truc2.php' + +// Variables du compilateur de squelettes + +$exceptions_des_tables = []; +$tables_principales = []; +$table_des_tables = []; +$tables_auxiliaires = []; +$table_primary = []; +$table_date = []; +$table_titre = []; +$tables_jointures = []; + +// Liste des statuts. +$liste_des_statuts = [ + 'info_administrateurs' => '0minirezo', + 'info_redacteurs' => '1comite', + 'info_visiteurs' => '6forum', + 'texte_statut_poubelle' => '5poubelle' +]; + +$liste_des_etats = [ + 'texte_statut_en_cours_redaction' => 'prepa', + 'texte_statut_propose_evaluation' => 'prop', + 'texte_statut_publie' => 'publie', + 'texte_statut_poubelle' => 'poubelle', + 'texte_statut_refuse' => 'refuse' +]; + +// liste des methodes d'authentifications +$liste_des_authentifications = [ + 'spip' => 'spip', + 'ldap' => 'ldap' +]; + +// Experimental : pour supprimer systematiquement l'affichage des numeros +// de classement des titres, recopier la ligne suivante dans mes_options : +# $table_des_traitements['TITRE'][]= 'typo(supprimer_numero(%s), "TYPO", $connect)'; + +// ** Securite ** +$visiteur_session = $auteur_session = $connect_statut = $connect_toutes_rubriques = $hash_recherche = $hash_recherche_strict = $ldap_present = ''; +$meta = $connect_id_rubrique = []; + +// version de l'interface a la base +$spip_sql_version = 1; + diff --git a/ecrire/bootstrap/initial_config.php b/ecrire/bootstrap/initial_config.php new file mode 100644 index 0000000000000000000000000000000000000000..2ccbe7c09e24a48b083e209f398bc73a2679f7bf --- /dev/null +++ b/ecrire/bootstrap/initial_config.php @@ -0,0 +1,116 @@ +<?php + +/** + * Constantes de démarrage de SPIP + */ + +/** + * Indique que SPIP est chargé + * + * Cela permet des tests de sécurités pour les fichiers PHP + * de SPIP et des plugins qui peuvent vérifier que SPIP est chargé + * et donc que les fichiers ne sont pas appelés en dehors de l'usage de SPIP + */ +define('_ECRIRE_INC_VERSION', '1'); + +if (!defined('_DIR_RESTREINT_ABS')) { + /** le nom du repertoire ecrire/ */ + define('_DIR_RESTREINT_ABS', 'ecrire/'); +} + +/** Chemin relatif pour aller dans ecrire + * vide si on est dans ecrire, 'ecrire/' sinon */ +define('_DIR_RESTREINT', (is_dir(_DIR_RESTREINT_ABS) ? _DIR_RESTREINT_ABS : '')); + +/** Chemin relatif pour aller à la racine */ +define('_DIR_RACINE', _DIR_RESTREINT ? '' : '../'); + +/** chemin absolu vers la racine */ +define('_ROOT_RACINE', dirname(__DIR__, 2) . '/'); +/** chemin absolu vers le repertoire de travail */ +define('_ROOT_CWD', getcwd() . '/'); +/** chemin absolu vers ecrire */ +define('_ROOT_RESTREINT', _ROOT_CWD . _DIR_RESTREINT); + +# Le nom des 4 repertoires modifiables par les scripts lances par httpd +# Par defaut ces 4 noms seront suffixes par _DIR_RACINE (cf plus bas) +# mais on peut les mettre ailleurs et changer completement les noms +if (!defined('_NOM_TEMPORAIRES_INACCESSIBLES')) { + /** Nom du repertoire des fichiers Temporaires Inaccessibles par http:// */ + define('_NOM_TEMPORAIRES_INACCESSIBLES', 'tmp/'); +} +if (!defined('_NOM_TEMPORAIRES_ACCESSIBLES')) { + /** Nom du repertoire des fichiers Temporaires Accessibles par http:// */ + define('_NOM_TEMPORAIRES_ACCESSIBLES', 'local/'); +} +if (!defined('_NOM_PERMANENTS_INACCESSIBLES')) { + /** Nom du repertoire des fichiers Permanents Inaccessibles par http:// */ + define('_NOM_PERMANENTS_INACCESSIBLES', 'config/'); +} +if (!defined('_NOM_PERMANENTS_ACCESSIBLES')) { + /** Nom du repertoire des fichiers Permanents Accessibles par http:// */ + define('_NOM_PERMANENTS_ACCESSIBLES', 'IMG/'); +} + +// Icones +if (!defined('_NOM_IMG_PACK')) { + /** Nom du dossier images */ + define('_NOM_IMG_PACK', 'images/'); +} +/** le chemin http (relatif) vers les images standard */ +define('_DIR_IMG_PACK', (_DIR_RACINE . 'prive/' . _NOM_IMG_PACK)); + +/** le chemin php (absolu) vers les images standard (pour hebergement centralise) */ +define('_ROOT_IMG_PACK', dirname(__DIR__, 2) . '/prive/' . _NOM_IMG_PACK); + +if (!defined('_JAVASCRIPT')) { + /** Nom du repertoire des bibliotheques JavaScript */ + // utilisable avec #CHEMIN et find_in_path + define('_JAVASCRIPT', 'javascript/'); +} + +/** le nom du repertoire des bibliotheques JavaScript du prive */ +define('_DIR_JAVASCRIPT', (_DIR_RACINE . 'prive/' . _JAVASCRIPT)); + +/** Le nom du fichier de personnalisation */ +if (!defined('_NOM_CONFIG')) { + define('_NOM_CONFIG', 'mes_options'); +} + +// Son emplacement absolu si on le trouve +if (@file_exists($f = _ROOT_RACINE . _NOM_PERMANENTS_INACCESSIBLES . _NOM_CONFIG . '.php')) { + /** Emplacement absolu du fichier d'option */ + define('_FILE_OPTIONS', $f); +} else { + define('_FILE_OPTIONS', ''); +} + +if (!defined('MODULES_IDIOMES')) { + /** + * Modules par défaut pour la traduction. + * + * Constante utilisée par le compilateur et le décompilateur + * sa valeur etant traitée par inc_traduire_dist + */ + define('MODULES_IDIOMES', 'public|spip|ecrire'); +} + +if (!defined('_IS_CLI')) { + define( + '_IS_CLI', + !isset($_SERVER['HTTP_HOST']) + && !strlen((string) $_SERVER['DOCUMENT_ROOT']) + && !empty($_SERVER['argv']) + && empty($_SERVER['REQUEST_METHOD']) + ); +} + +// Definir les niveaux de log +defined('_LOG_HS') || define('_LOG_HS', 0); +defined('_LOG_ALERTE_ROUGE') || define('_LOG_ALERTE_ROUGE', 1); +defined('_LOG_CRITIQUE') || define('_LOG_CRITIQUE', 2); +defined('_LOG_ERREUR') || define('_LOG_ERREUR', 3); +defined('_LOG_AVERTISSEMENT') || define('_LOG_AVERTISSEMENT', 4); +defined('_LOG_INFO_IMPORTANTE') || define('_LOG_INFO_IMPORTANTE', 5); +defined('_LOG_INFO') || define('_LOG_INFO', 6); +defined('_LOG_DEBUG') || define('_LOG_DEBUG', 7); diff --git a/ecrire/bootstrap/mitigation.php b/ecrire/bootstrap/mitigation.php new file mode 100644 index 0000000000000000000000000000000000000000..3007087aca6f93e9b37670ee104a4af2b3e46d3d --- /dev/null +++ b/ecrire/bootstrap/mitigation.php @@ -0,0 +1,21 @@ +<?php + +/* + * Détecteur de robot d'indexation + */ +if (!defined('_IS_BOT')) { + define( + '_IS_BOT', + isset($_SERVER['HTTP_USER_AGENT']) + && preg_match( + // mots generiques + ',bot|slurp|crawler|spider|webvac|yandex|' + // MSIE 6.0 est un botnet 99,9% du temps, on traite donc ce USER_AGENT comme un bot + . 'MSIE 6\.0|' + // UA plus cibles + . '80legs|accoona|AltaVista|ASPSeek|Baidu|Charlotte|EC2LinkFinder|eStyle|facebook|flipboard|hootsuite|FunWebProducts|Google|Genieo|INA dlweb|InfegyAtlas|Java VM|LiteFinder|Lycos|MetaURI|Moreover|Rambler|Scooter|ScrubbyBloglines|Yahoo|Yeti' + . ',i', + (string)$_SERVER['HTTP_USER_AGENT'] + ) + ); +} diff --git a/ecrire/bootstrap/proxy.php b/ecrire/bootstrap/proxy.php new file mode 100644 index 0000000000000000000000000000000000000000..6203c2254407a0576c90fddb812d1a792921e628 --- /dev/null +++ b/ecrire/bootstrap/proxy.php @@ -0,0 +1,55 @@ +<?php + +/** + * Prendre en compte les proxy + * + * - entetes HTTP_X_FORWARDED_XX + * - ip + */ + +if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { + if (empty($_SERVER['HTTP_X_FORWARDED_HOST'])) { + $_SERVER['HTTP_X_FORWARDED_HOST'] = $_SERVER['HTTP_HOST']; + } + if (empty($_SERVER['HTTP_X_FORWARDED_PORT'])) { + $_SERVER['HTTP_X_FORWARDED_PORT'] = 443; + } +} + +if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { + if (isset($_SERVER['HTTP_X_FORWARDED_PORT']) && is_numeric($_SERVER['HTTP_X_FORWARDED_PORT'])) { + $_SERVER['SERVER_PORT'] = $_SERVER['HTTP_X_FORWARDED_PORT']; + if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { + $_SERVER['HTTPS'] = 'on'; + if (isset($_SERVER['REQUEST_SCHEME'])) { + $_SERVER['REQUEST_SCHEME'] = 'https'; + } + } + } + $host = $_SERVER['HTTP_X_FORWARDED_HOST']; + if (str_contains((string) $host, ',')) { + $h = explode(',', (string) $host); + $host = trim(reset($h)); + } + // securite sur le contenu de l'entete + $host = strtr($host, "<>?\"\{\}\$'` \r\n", '____________'); + $_SERVER['HTTP_HOST'] = $host; +} + +// +// On note le numero IP du client dans la variable $ip +// +if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { + $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; + if (str_contains((string) $ip, ',')) { + $ip = explode(',', (string) $ip); + $ip = reset($ip); + } + // ecraser $_SERVER['REMOTE_ADDR'] si elle est en localhost + if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] === '127.0.0.1') { + $_SERVER['REMOTE_ADDR'] = $ip; + } +} +if (isset($_SERVER['REMOTE_ADDR'])) { + $ip = $_SERVER['REMOTE_ADDR']; +} diff --git a/ecrire/inc_version.php b/ecrire/inc_version.php index bd8101215613b7e7893d789f7c46655e3d6ee354..a08707d0c506d90ead9f1a4252b88f71977790da 100644 --- a/ecrire/inc_version.php +++ b/ecrire/inc_version.php @@ -21,60 +21,7 @@ if (defined('_ECRIRE_INC_VERSION')) { return; } -/** - * Indique que SPIP est chargé - * - * Cela permet des tests de sécurités pour les fichiers PHP - * de SPIP et des plugins qui peuvent vérifier que SPIP est chargé - * et donc que les fichiers ne sont pas appelés en dehors de l'usage de SPIP - */ -define('_ECRIRE_INC_VERSION', '1'); - -/** version PHP minimum exigee (cf. inc/utils) */ -define('_PHP_MIN', '8.1.0'); -define('_PHP_MAX', '8.2.99'); - -if (!defined('_DIR_RESTREINT_ABS')) { - /** le nom du repertoire ecrire/ */ - define('_DIR_RESTREINT_ABS', 'ecrire/'); -} - -/** Chemin relatif pour aller dans ecrire - * vide si on est dans ecrire, 'ecrire/' sinon */ -define( - '_DIR_RESTREINT', - (is_dir(_DIR_RESTREINT_ABS) ? _DIR_RESTREINT_ABS : '') -); - -/** Chemin relatif pour aller à la racine */ -define('_DIR_RACINE', _DIR_RESTREINT ? '' : '../'); - -/** chemin absolu vers la racine */ -define('_ROOT_RACINE', dirname(__DIR__) . '/'); -/** chemin absolu vers le repertoire de travail */ -define('_ROOT_CWD', getcwd() . '/'); -/** chemin absolu vers ecrire */ -define('_ROOT_RESTREINT', _ROOT_CWD . _DIR_RESTREINT); - -# Le nom des 4 repertoires modifiables par les scripts lances par httpd -# Par defaut ces 4 noms seront suffixes par _DIR_RACINE (cf plus bas) -# mais on peut les mettre ailleurs et changer completement les noms -if (!defined('_NOM_TEMPORAIRES_INACCESSIBLES')) { - /** Nom du repertoire des fichiers Temporaires Inaccessibles par http:// */ - define('_NOM_TEMPORAIRES_INACCESSIBLES', 'tmp/'); -} -if (!defined('_NOM_TEMPORAIRES_ACCESSIBLES')) { - /** Nom du repertoire des fichiers Temporaires Accessibles par http:// */ - define('_NOM_TEMPORAIRES_ACCESSIBLES', 'local/'); -} -if (!defined('_NOM_PERMANENTS_INACCESSIBLES')) { - /** Nom du repertoire des fichiers Permanents Inaccessibles par http:// */ - define('_NOM_PERMANENTS_INACCESSIBLES', 'config/'); -} -if (!defined('_NOM_PERMANENTS_ACCESSIBLES')) { - /** Nom du repertoire des fichiers Permanents Accessibles par http:// */ - define('_NOM_PERMANENTS_ACCESSIBLES', 'IMG/'); -} +require_once __DIR__ . '/bootstrap/initial_config.php'; // inclure l'ecran de securite si il n'a pas été inclus en prepend php if ( @@ -85,353 +32,11 @@ if ( } // et on peut lancer l'autoloader -require_once __DIR__ . '/../vendor/autoload.php'; - -// Icones -if (!defined('_NOM_IMG_PACK')) { - /** Nom du dossier images */ - define('_NOM_IMG_PACK', 'images/'); -} -/** le chemin http (relatif) vers les images standard */ -define('_DIR_IMG_PACK', (_DIR_RACINE . 'prive/' . _NOM_IMG_PACK)); - -/** le chemin php (absolu) vers les images standard (pour hebergement centralise) */ -define('_ROOT_IMG_PACK', dirname(__DIR__) . '/prive/' . _NOM_IMG_PACK); - -if (!defined('_JAVASCRIPT')) { - /** Nom du repertoire des bibliotheques JavaScript */ - define('_JAVASCRIPT', 'javascript/'); -} // utilisable avec #CHEMIN et find_in_path -/** le nom du repertoire des bibliotheques JavaScript du prive */ -define('_DIR_JAVASCRIPT', (_DIR_RACINE . 'prive/' . _JAVASCRIPT)); - - -/** Le nom du fichier de personnalisation */ -if (!defined('_NOM_CONFIG')) { - define('_NOM_CONFIG', 'mes_options'); -} - -// Son emplacement absolu si on le trouve -if (@file_exists($f = _ROOT_RACINE . _NOM_PERMANENTS_INACCESSIBLES . _NOM_CONFIG . '.php')) { - /** Emplacement absolu du fichier d'option */ - define('_FILE_OPTIONS', $f); -} else { - define('_FILE_OPTIONS', ''); -} - -if (!defined('MODULES_IDIOMES')) { - /** - * Modules par défaut pour la traduction. - * - * Constante utilisée par le compilateur et le décompilateur - * sa valeur etant traitée par inc_traduire_dist - */ - define('MODULES_IDIOMES', 'public|spip|ecrire'); -} - -// *** Fin des define *** // - - -/* - * Détecteur de robot d'indexation - */ -if (!defined('_IS_BOT')) { - define( - '_IS_BOT', - isset($_SERVER['HTTP_USER_AGENT']) - && preg_match( - // mots generiques - ',bot|slurp|crawler|spider|webvac|yandex|' - // MSIE 6.0 est un botnet 99,9% du temps, on traite donc ce USER_AGENT comme un bot - . 'MSIE 6\.0|' - // UA plus cibles - . '80legs|accoona|AltaVista|ASPSeek|Baidu|Charlotte|EC2LinkFinder|eStyle|facebook|flipboard|hootsuite|FunWebProducts|Google|Genieo|INA dlweb|InfegyAtlas|Java VM|LiteFinder|Lycos|MetaURI|Moreover|Rambler|Scooter|ScrubbyBloglines|Yahoo|Yeti' - . ',i', - (string)$_SERVER['HTTP_USER_AGENT'] - ) - ); -} - -if (!defined('_IS_CLI')) { - define( - '_IS_CLI', - !isset($_SERVER['HTTP_HOST']) - && !strlen((string) $_SERVER['DOCUMENT_ROOT']) - && !empty($_SERVER['argv']) - && empty($_SERVER['REQUEST_METHOD']) - ); -} - -// *** Parametrage par defaut de SPIP *** -// -// Les globales qui suivent peuvent etre modifiees -// dans le fichier de personnalisation indique ci-dessus. -// Il suffit de copier les lignes ci-dessous, et ajouter le marquage de debut -// et fin de fichier PHP ("< ?php" et "? >", sans les espaces) -// Ne pas les rendre indefinies. - -global - $nombre_de_logs, - $taille_des_logs, - $table_prefix, - $cookie_prefix, - $dossier_squelettes, - $filtrer_javascript, - $type_urls, - $debut_date_publication, - $ip, - $mysql_rappel_connexion, - $mysql_rappel_nom_base, - $test_i18n, - $ignore_auth_http, - $ignore_remote_user, - $derniere_modif_invalide, - $home_server, - $help_server, - $url_glossaire_externe, - $tex_server, - $traiter_math, - $xhtml, - $xml_indent, - $source_vignettes, - $formats_logos, - $controler_dates_rss, - $spip_pipeline, - $spip_matrice, - $plugins, - $surcharges, - $exceptions_des_tables, - $tables_principales, - $table_des_tables, - $tables_auxiliaires, - $table_primary, - $table_date, - $table_titre, - $tables_jointures, - $liste_des_statuts, - $liste_des_etats, - $liste_des_authentifications, - $spip_version_branche, - $spip_version_code, - $spip_version_base, - $spip_sql_version, - $spip_version_affichee, - $visiteur_session, - $auteur_session, - $connect_statut, - $connect_toutes_rubriques, - $hash_recherche, - $hash_recherche_strict, - $ldap_present, - $meta, - $connect_id_rubrique, - $puce; - -# comment on logge, defaut 4 tmp/spip.log de 100k, 0 ou 0 suppriment le log -$nombre_de_logs = 4; -$taille_des_logs = 100; - -// Definir les niveaux de log -defined('_LOG_HS') || define('_LOG_HS', 0); -defined('_LOG_ALERTE_ROUGE') || define('_LOG_ALERTE_ROUGE', 1); -defined('_LOG_CRITIQUE') || define('_LOG_CRITIQUE', 2); -defined('_LOG_ERREUR') || define('_LOG_ERREUR', 3); -defined('_LOG_AVERTISSEMENT') || define('_LOG_AVERTISSEMENT', 4); -defined('_LOG_INFO_IMPORTANTE') || define('_LOG_INFO_IMPORTANTE', 5); -defined('_LOG_INFO') || define('_LOG_INFO', 6); -defined('_LOG_DEBUG') || define('_LOG_DEBUG', 7); - -// on peut definir _LOG_FILTRE_GRAVITE dans mes_options.php - -// Prefixe des tables dans la base de donnees -// (a modifier pour avoir plusieurs sites SPIP dans une seule base) -$table_prefix = 'spip'; - -// Prefixe des cookies -// (a modifier pour installer des sites SPIP dans des sous-repertoires) -$cookie_prefix = 'spip'; - -// Dossier des squelettes -// (a modifier si l'on veut passer rapidement d'un jeu de squelettes a un autre) -$dossier_squelettes = ''; - -// Pour le javascript, trois modes : parano (-1), prive (0), ok (1) -// parano le refuse partout, ok l'accepte partout -// le mode par defaut le signale en rouge dans l'espace prive -// Si < 1, les fichiers SVG sont traites s'ils emanent d'un redacteur -$filtrer_javascript = 0; -// PS: dans les forums, petitions, flux syndiques... c'est *toujours* securise - -// Type d'URLs -// inc/utils.php sélectionne le type 'page' (spip.php?article123) en l'absence -// d'autre configuration stockée en $GLOBALS['meta']['type_urls] -// Pour les autres types: voir urls_etendues -// $type_urls n'a plus de valeur par défaut en 3.1 mais permet de forcer une -// configuration d'urls dans les fichiers d'options. - -#la premiere date dans le menu deroulant de date de publication -# null: automatiquement (affiche les 8 dernieres annees) -# 0: affiche un input libre -# 1997: le menu commence a 1997 jusqu'a annee en cours -$debut_date_publication = null; - - -// -// Prendre en compte les entetes HTTP_X_FORWARDED_XX -// -if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { - if (empty($_SERVER['HTTP_X_FORWARDED_HOST'])) { - $_SERVER['HTTP_X_FORWARDED_HOST'] = $_SERVER['HTTP_HOST']; - } - if (empty($_SERVER['HTTP_X_FORWARDED_PORT'])) { - $_SERVER['HTTP_X_FORWARDED_PORT'] = 443; - } -} -if (isset($_SERVER['HTTP_X_FORWARDED_HOST'])) { - if (isset($_SERVER['HTTP_X_FORWARDED_PORT']) && is_numeric($_SERVER['HTTP_X_FORWARDED_PORT'])) { - $_SERVER['SERVER_PORT'] = $_SERVER['HTTP_X_FORWARDED_PORT']; - if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') { - $_SERVER['HTTPS'] = 'on'; - if (isset($_SERVER['REQUEST_SCHEME'])) { - $_SERVER['REQUEST_SCHEME'] = 'https'; - } - } - } - $host = $_SERVER['HTTP_X_FORWARDED_HOST']; - if (str_contains((string) $host, ',')) { - $h = explode(',', (string) $host); - $host = trim(reset($h)); - } - // securite sur le contenu de l'entete - $host = strtr($host, "<>?\"\{\}\$'` \r\n", '____________'); - $_SERVER['HTTP_HOST'] = $host; -} -// -// On note le numero IP du client dans la variable $ip -// -if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { - $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; - if (str_contains((string) $ip, ',')) { - $ip = explode(',', (string) $ip); - $ip = reset($ip); - } - // ecraser $_SERVER['REMOTE_ADDR'] si elle est en localhost - if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] === '127.0.0.1') { - $_SERVER['REMOTE_ADDR'] = $ip; - } -} -if (isset($_SERVER['REMOTE_ADDR'])) { - $ip = $_SERVER['REMOTE_ADDR']; -} - -// Pour renforcer la privacy, decommentez la ligne ci-dessous (ou recopiez-la -// dans le fichier config/mes_options) : SPIP ne pourra alors conserver aucun -// numero IP, ni temporairement lors des visites (pour gerer les statistiques -// ou dans spip.log), ni dans les forums (responsabilite) -# $ip = substr(md5($ip),0,16); - - -// faut-il faire des connexions Mysql rappelant le nom de la base MySQL ? -// (utile si vos squelettes appellent d'autres bases MySQL) -// (A desactiver en cas de soucis de connexion chez certains hebergeurs) -// Note: un test a l'installation peut aussi avoir desactive -// $mysql_rappel_nom_base directement dans le fichier inc_connect -$mysql_rappel_nom_base = true; - -// faut-il afficher en rouge les chaines non traduites ? -$test_i18n = false; - -// faut-il ignorer l'authentification par auth http/remote_user ? -$ignore_auth_http = false; -$ignore_remote_user = true; # methode obsolete et risquee - -// Invalider les caches a chaque modification du contenu ? -// Si votre site a des problemes de performance face a une charge tres elevee, -// vous pouvez mettre cette globale a false (dans mes_options). -$derniere_modif_invalide = true; - -// -// Serveurs externes -// -# Serveur de documentation officielle -$home_server = 'https://www.spip.net'; -# glossaire pour raccourci [?X]. Aussi: [?X#G] et definir glossaire_G -$url_glossaire_externe = 'https://@lang@.wikipedia.org/wiki/%s'; - -# TeX -$tex_server = 'https://math.spip.org/tex.php'; -# MathML (pas pour l'instant: manque un bon convertisseur) -// $mathml_server = 'http://arno.rezo.net/tex2mathml/latex.php'; - -// Produire du TeX ou du MathML ? -$traiter_math = 'tex'; - -// Appliquer un indenteur XHTML aux espaces public et/ou prive ? -$xhtml = false; -$xml_indent = false; +require_once dirname(__DIR__) . '/vendor/autoload.php'; -$formats_logos = ['jpg', 'png', 'svg', 'gif', 'webp']; - -// Controler les dates des item dans les flux RSS ? -$controler_dates_rss = true; - - -// -// Pipelines & plugins -// -# les pipeline standards (traitements derivables aka points d'entree) -# ils seront compiles par la suite -# note: un pipeline non reference se compile aussi, mais uniquement -# lorsqu'il est rencontre -// https://programmer.spip.net/-Les-pipelines- -$spip_pipeline = []; - -# la matrice standard (fichiers definissant les fonctions a inclure) -$spip_matrice = []; -# les plugins a activer -$plugins = []; // voir le contenu du repertoire /plugins/ -# les surcharges de include_spip() -$surcharges = []; // format 'inc_truc' => '/plugins/chose/inc_truc2.php' - -// Variables du compilateur de squelettes - -$exceptions_des_tables = []; -$tables_principales = []; -$table_des_tables = []; -$tables_auxiliaires = []; -$table_primary = []; -$table_date = []; -$table_titre = []; -$tables_jointures = []; - -// Liste des statuts. -$liste_des_statuts = [ - 'info_administrateurs' => '0minirezo', - 'info_redacteurs' => '1comite', - 'info_visiteurs' => '6forum', - 'texte_statut_poubelle' => '5poubelle' -]; - -$liste_des_etats = [ - 'texte_statut_en_cours_redaction' => 'prepa', - 'texte_statut_propose_evaluation' => 'prop', - 'texte_statut_publie' => 'publie', - 'texte_statut_poubelle' => 'poubelle', - 'texte_statut_refuse' => 'refuse' -]; - -// liste des methodes d'authentifications -$liste_des_authentifications = [ - 'spip' => 'spip', - 'ldap' => 'ldap' -]; - -// Experimental : pour supprimer systematiquement l'affichage des numeros -// de classement des titres, recopier la ligne suivante dans mes_options : -# $table_des_traitements['TITRE'][]= 'typo(supprimer_numero(%s), "TYPO", $connect)'; - -// Droits d'acces maximum par defaut -@umask(0); +require_once __DIR__ . '/bootstrap/globals_config.php'; +require_once __DIR__ . '/bootstrap/proxy.php'; +require_once __DIR__ . '/bootstrap/mitigation.php'; // numero de branche, utilise par les plugins // pour specifier les versions de SPIP necessaires @@ -441,6 +46,10 @@ $spip_version_branche = '5.0.0-dev'; define('_SPIP_VERSION_ID', 50000); define('_SPIP_EXTRA_VERSION', '-dev'); +/** version PHP minimum exigee (cf. inc/utils) */ +define('_PHP_MIN', '8.1.0'); +define('_PHP_MAX', '8.2.99'); + // cette version dev accepte tous les plugins compatible avec la version ci-dessous // a supprimer en phase beta/rc/release # define('_DEV_VERSION_SPIP_COMPAT', '4.2.99'); @@ -450,19 +59,13 @@ $spip_version_code = 2023_07_15; // version de la base SQL (= Date + numero incremental a 2 chiffres YYYYMMDDXX) $spip_version_base = 2022_02_23_03; -// version de l'interface a la base -$spip_sql_version = 1; - // version de spip en chaine // 1.xxyy : xx00 versions stables publiees, xxyy versions de dev // (ce qui marche pour yy ne marchera pas forcement sur une version plus ancienne) $spip_version_affichee = "$spip_version_branche"; -// ** Securite ** -$visiteur_session = $auteur_session = $connect_statut = $connect_toutes_rubriques = $hash_recherche = $hash_recherche_strict = $ldap_present = ''; -$meta = $connect_id_rubrique = []; - -// *** Fin des globales *** // +// Droits d'acces maximum par defaut +@umask(0); // // Charger les fonctions liees aux serveurs Http et Sql. @@ -498,7 +101,6 @@ spip_initialisation_core( (_DIR_RACINE . _NOM_TEMPORAIRES_ACCESSIBLES) ); - // chargement des plugins : doit arriver en dernier // car dans les plugins on peut inclure inc-version // qui ne sera pas execute car _ECRIRE_INC_VERSION est defini @@ -532,6 +134,7 @@ if (!defined('_OUTILS_DEVELOPPEURS')) { if (test_espace_prive()) { include_spip('inc/autoriser'); } + // // Installer Spip si pas installe... sauf si justement on est en train //