Bonjour tout le monde,
je me suis aperçu récemment qu’une partie de ma config spip était disponible publiquement via l’url ecrire/?exec=install&etape=4.
Je souhaite masquer ces informations ( pour vivre heureux vivons cachés) et par curiosité j’ai été voir ce que fait spip.net: j’ai une belle 403, et je voudrais la même!
Ma question: je n’ai pas trouvé d’option permettant de le faire nativement dans spip, est ce bien le cas? Sinon je ferais une règle dans mon htaccess mais si je peux éviter du code je suis preneur.
Merci!
PS: je n’utilise pas cette interface graphique, je pilote tout via la ligne de commande donc pas de soucis pour la bannir complètement.
Et bien c’est vraiment étrange, je confirme qu’en étant NON connecté (navigation privée dans un autre browser) j’ai bien accès à cette page, et pas de 403…
Je pense que j’ai une piste, il semble que j’ai un problème avec analyse_fichier_connection et la regex (de la mort ) qui ne détecte pas ma chaîne spip_connect_db dans mon fichier config/connect.php. Du coup il part dans le processus d’installation…
Je vais creuser, je mettrais plus d’infos quand j’en aurais.
Bon, la regex n’est pas particulièrement souple.
On parle de: #spip_connect_db[(]\s*'([^']*)'\s*,\s*'([^']*)'\s*,\s*'([^']*)'\s*,\s*'([^']*)'\s*,\s*'([^']*)'(?:\s*,\s*'([^']*)'(?:\s*,\s*'([^']*)'(?:\s*,\s*'([^']*)'(?:\s*,\s*'([^']*)')?)?)?)?#
Cette regex s’attend explicitement à avoir une chaîne de caractère comme: spip_connect_db('DB_HOST', '', 'DB_USER', 'DB_PASSWORD','DB_NAME', 'mysql', 'spip', '');
alors que moi j’ai spip_connect_db($_ENV['DB_HOST'], '', $_ENV['DB_USER'], $_ENV['DB_PASSWORD'], $_ENV['DB_NAME'], 'mysql', 'spip', '');
car je vais lire mes infos de config depuis un fichier .env en même temps que plein d’autres paramètres…
Sur un projet où j’ai aussi ce type de connect je n’ai pas le soucis mais un « SPIP est déjà installé »
Tu as quoi exactement ? les infos de login à la bdd ?
Hmmm bonne piste, avec l’eclatement en sous modules composer cette partie du code a été réécrite semble t-il install · 4.4 · spip / ecrire · GitLab . Je vais tester une upgrade en local mais ça semble prometteur
Je crois que tu as raison (je reproduis en 5.0-dev) : si tu as des $ dans l’appel de spip_connect_db config/connect.php ça semble pouvoir être écrasé dans l’install, et la page ecrire/?exec=install semble visible, effectivement parce que analyse_fichier_connection n’arrive pas à retourner du contenu…
Par exemple rien qu’avec cela dans config/connect.php (et un environnement local ddev/mysql)
Il semble que ça ne soit pas prévu pour ça d’une part…
D’autre part (mais c’est un autre point d’évolution)… toute cette mécanique pour les accès bdd devrait être… différente… soit déclaré dans .env, soit avec un fichier de config retournant un array…
Je t’invite à faire un ticket sur spip/ecrire déjà.
OK, au début je ne pensais pas que ça partirait aussi loin dans le code d’où mon intervention ici plutôt que sur la forge.
Je reproduis le problème en 4.4…
@pierretux je ne comprends pas pourquoi nous n’avons pas le même comportement…
edit: je ferai un ticket quand je comprendrais un peu mieux pourquoi ça passe pour Pierre, un truc m’échappe pour le moment…
Je viens de tester regarder plus en détail sur une 4.4, la fonction qui teste la connexion est identique même si la structure du code à changé.
@pierretux , tu n’aurais pas du code commenté dans ton fichier par hasard?
Car si un //spip_connect_db('DB_HOST', '', 'DB_USER', 'DB_PASSWORD','DB_NAME', 'mysql', 'spip', ''); traîne (ou l’équivalent en /* */) dans ton fichier connect.php, et bien ça suffit pour leurrer le système et lui faire croire que spip est installé… (testé avec succès à l’instant chez moi avec des valeurs à la noix)