Instanzname in die Config, Setup-Luecke geschlossen
Instanz: - $instanz in der externen Config bestimmt INSTANZ, UPLOADS_PATH und SESSION_NAME. Der Verzeichnisname waehlt nur noch die Config-Datei aus und ist Fallback, solange $instanz fehlt. - savePDF() schreibt nicht mehr fest nach DOCUMENT_ROOT."kunden", sondern in das Verzeichnis, das es auch aufraeumt. .gitkeep wird nicht mehr mitgeloescht. Sicherheit: - index.php?action=setup war ohne Login auch bei gueltiger Config erreichbar. rebuild-settings.php schrieb $_POST ungeprueft als PHP-Code in die Config (Codeausfuehrung, sofern die Datei schreibbar war). - Setup nur noch ohne gueltige Config, firststart.php und rebuild-settings.php pruefen das zusaetzlich selbst. - Config-Werte werden per var_export() maskiert. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
+28
-11
@@ -1,8 +1,26 @@
|
||||
<?php
|
||||
<?php
|
||||
// Nur als Teil von index.php?action=setup gültig, nie direkt aufrufbar.
|
||||
if(!defined("CONFIG_PATH") || readsettings() == "valid")
|
||||
exit;
|
||||
require_once("incs/import.php");
|
||||
set_time_limit(60000);
|
||||
$err = 0;
|
||||
if(!file_put_contents (CONFIG_PATH.CONFIG_FILE,
|
||||
|
||||
/*
|
||||
* Formularwert als PHP-Literal für die Config. var_export() erzeugt einen
|
||||
* korrekt maskierten String in einfachen Anführungszeichen - früher wurde
|
||||
* $_POST ungeprüft zwischen doppelte Anführungszeichen gesetzt, womit sich
|
||||
* beliebiger PHP-Code in die Config schreiben ließ.
|
||||
*/
|
||||
function configWert($name, $html = false)
|
||||
{
|
||||
$wert = isset($_POST[$name]) && is_string($_POST[$name]) ? $_POST[$name] : "";
|
||||
if($html)
|
||||
$wert = htmlspecialchars($wert);
|
||||
return var_export($wert, true);
|
||||
}
|
||||
|
||||
if(!file_put_contents (CONFIG_PATH.CONFIG_FILE,
|
||||
'<?php
|
||||
global $mysql_user;
|
||||
global $mysql_db;
|
||||
@@ -13,16 +31,15 @@ if(!file_put_contents (CONFIG_PATH.CONFIG_FILE,
|
||||
global $dbconn;
|
||||
global $geodbconn;
|
||||
|
||||
$instanz = '.var_export(INSTANZ, true).';
|
||||
$dbconn = 0;
|
||||
$geodbconn = 0;
|
||||
$mysql_user = "'.$_POST["mysqluser"].'";
|
||||
$mysql_pw = "'.$_POST["mysqlpw"].'";
|
||||
$mysql_db = "'.mysql_escape_string($_POST["mysqldb"]).'";
|
||||
$mysql_server = "'.$_POST["mysqlserver"].'";
|
||||
$mysql_opengeodb = "'.mysql_escape_string($_POST["opengeodb"]).'";
|
||||
$firma = "'.htmlspecialchars($_POST["firma"]).'";
|
||||
$mysql_pw = "'.$_POST["mysqlpw"].'";
|
||||
$mysql_pw = "'.$_POST["mysqlpw"].'";
|
||||
$mysql_user = '.configWert("mysqluser").';
|
||||
$mysql_pw = '.configWert("mysqlpw").';
|
||||
$mysql_db = '.configWert("mysqldb").';
|
||||
$mysql_server = '.configWert("mysqlserver").';
|
||||
$mysql_opengeodb = '.configWert("opengeodb").';
|
||||
$firma = '.configWert("firma", true).';
|
||||
?>'))
|
||||
{
|
||||
$err= error("Konfiguration konnte nicht geschrieben werden!");
|
||||
@@ -73,7 +90,7 @@ else
|
||||
$version = $status[1];
|
||||
}
|
||||
if(!$err)
|
||||
ok("<font size='+1'><b>Installation komplett!!</b></font><br /> Bitte entfernen Sie nun die Schreibrechte für die Datei /kundenverwaltung/config/settings.conf (chmod 555)");
|
||||
ok("<font size='+1'><b>Installation komplett!!</b></font><br /> Bitte entfernen Sie nun die Schreibrechte für die Datei ".htmlspecialchars(CONFIG_PATH.CONFIG_FILE)." (chmod 444)");
|
||||
}
|
||||
else
|
||||
$err = error("Konfigurationsdatei fehlerhaft!");
|
||||
|
||||
Reference in New Issue
Block a user