Files
Kundenverwaltung/update/rebuild-settings.php
T
adminandClaude Opus 5 73e64b72ac 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>
2026-09-17 08:44:33 +02:00

98 lines
2.7 KiB
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;
/*
* 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;
global $mysql_pw;
global $mysql_server;
global $mysql_opengeodb;
global $firma;
global $dbconn;
global $geodbconn;
$instanz = '.var_export(INSTANZ, true).';
$dbconn = 0;
$geodbconn = 0;
$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!");
}
else
{
$settings=readsettings();
if($settings == "valid")
{
if(!$dbconn = @mysqli_connect($mysql_server, $mysql_user, $mysql_pw))
$err = error("Verbindung zur Datenbank fehlgeschlagen!!");
if(!@mysqli_select_db($dbconn,$mysql_db))
$err = error("Datenbank nicht gefunden!!");
if(!$err)
{
echo "<script>
toBottom();
</script>";
if($_POST["deletedb"] && isset($_POST["sunname"]))
$err = delete_db($dbconn,$mysql_db);
$err = create_tables($dbconn);
}
if(!$err && $_POST["deletedb"] && isset($_POST["sunname"]))
{
$err = insertSuperUser($dbconn);
}
if(!$err)
{
if(isset($_POST["importsks"]))
{
message("<b>Importiere alte SKS Daten</b><br />Bitte überprüfen Sie eventuell auftretende Warnungen!!<br />Da die Datenbankstruktur nicht übereinstimmt kann nicht garantiert werden, dass die importierten Daten vollständig und korrekt sind.");
$err = importsks($dbconn);
}
}
if(!$err)
{
$newversion = checknewversion($version);
if(isset($_POST["version"]))
{
$status = manageupdate($version, $_POST["version"]);
importSql($_POST["version"]);
}
$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 ".htmlspecialchars(CONFIG_PATH.CONFIG_FILE)." (chmod 444)");
}
else
$err = error("Konfigurationsdatei fehlerhaft!");
}
?>