Zugangsdaten aus dem Code in die externe Config verschoben

SMTP-Passwoerter (mail_attachment), der MySQL-Zugang von stats.php und die
Schluessel fuer OpenWeatherMap und Aeris standen im Klartext im Code. Sie
kommen jetzt aus der externen Config ($smtp_konten, $stats_mysql_*,
$openweathermap_appid, $aeris_client_*). rebuild-settings.php legt die
Eintraege bei der Ersteinrichtung leer an.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-17 09:15:22 +02:00
co-authored by Claude Opus 5
parent 73e64b72ac
commit 0dceb35502
4 changed files with 44 additions and 24 deletions
+1 -1
View File
@@ -45,7 +45,7 @@ cd /home/intranet/kunden && php db-backup.php
`CONFIG_PATH` zeigt auf `/volume1/homes/wagner/kundenconfig/` (Linux) bzw. `c:/kundenverwaltung/config/` (Windows). Geschrieben wird die Datei von `update/rebuild-settings.php` beim Ersteinrichten.
Neben den Zugangsdaten steht dort auch `$instanz` (siehe oben). Die Datei deklariert `$mysql_user`, `$mysql_pw`, `$mysql_server`, `$mysql_db`, `$firma` und weitere ausdrücklich als `global` und weist sie erst danach zu. Nur deshalb funktioniert `readsettings()` in `incs/settings.php`: Das `include` passiert im Funktionsrumpf, ohne die `global`-Zeilen blieben die Variablen dort lokal. Wer die Config-Struktur ändert, muss diese Eigenheit erhalten.
Neben den DB-Zugangsdaten stehen dort auch `$instanz` (siehe oben), die SMTP-Zugänge je Firma (`$smtp_konten`, Schlüssel `"*"` als Rückfall, genutzt von `mail_attachment()`), der Zugang zur Statistik-Datenbank für `stats.php` (`$stats_mysql_*`) und die Wetter-API-Schlüssel (`$openweathermap_appid`, `$aeris_client_*`). Die Datei deklariert `$mysql_user`, `$mysql_pw`, `$mysql_server`, `$mysql_db`, `$firma` und weitere ausdrücklich als `global` und weist sie erst danach zu. Nur deshalb funktioniert `readsettings()` in `incs/settings.php`: Das `include` passiert im Funktionsrumpf, ohne die `global`-Zeilen blieben die Variablen dort lokal. Wer die Config-Struktur ändert, muss diese Eigenheit erhalten.
Zugangsdaten gehören **nie** in den Code — `db-backup.php` zeigt das Muster für Skripte außerhalb des Request-Zyklus (Config einlesen, Passwort über eine temporäre Optionsdatei an `mysqldump`, nicht per Kommandozeile).
+17 -20
View File
@@ -85,8 +85,17 @@ function PopulateSessionVars()
use PHPMailer\PHPMailer\PHPMailer;
function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message) {
// SMTP-Zugänge stehen in der externen Config, je Firma ein Eintrag,
// "*" gilt für alle übrigen: array("user" => "...", "pw" => "...")
global $smtp_konten;
if(isset($smtp_konten[$_SESSION["firma"]]))
$konto = $smtp_konten[$_SESSION["firma"]];
elseif(isset($smtp_konten["*"]))
$konto = $smtp_konten["*"];
else
return error("Kein SMTP-Zugang für \"".htmlspecialchars($_SESSION["firma"])."\" in der Konfiguration (\$smtp_konten).");
$mail = new PHPMailer();
$mail->IsSMTP();
@@ -97,21 +106,8 @@ function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $rep
$mail->SMTPAuth = true; // turn on SMTP authentication
$mail->SMTPSecure = "ssl";
$mail->Port = 465;
if($_SESSION["firma"] == "Wagner Markisen")
{
$mail->Username = "info@wagner-markisen.de"; // SMTP username
$mail->Password = "ENTFERNT"; // SMTP password
}
elseif($_SESSION["firma"] == "Ingenieurbüro Wagner")
{
$mail->Username = "m0w1337@gmail.com"; // SMTP username
$mail->Password = "ENTFERNT"; // SMTP password
}
else
{
$mail->Username = "wagnermarkisen12@googlemail.com"; // SMTP username
$mail->Password = "ENTFERNT"; // SMTP password
}
$mail->Username = $konto["user"];
$mail->Password = $konto["pw"];
$mail->From = $from_mail;
$mail->FromName = $from_name;
@@ -570,9 +566,10 @@ function GetWeather($plz='87509', $land='germany', $icons_src="./pics/icons/weat
{
$station = $plz."-".$land;
}
//$url[0] = "http://api.aerisapi.com/observations/immenstadt,germany?client_id=ENTFERNT&client_secret=ENTFERNT";
$url[0] = "http://api.openweathermap.org/data/2.5/weather?zip=87509,de&APPID=ENTFERNT";
$url[1] = "http://api.aerisapi.com/forecasts/immenstadt,germany?client_id=ENTFERNT&client_secret=ENTFERNT&from=today&to=+6days";
// API-Schlüssel stehen in der externen Config
global $openweathermap_appid, $aeris_client_id, $aeris_client_secret;
$url[0] = "http://api.openweathermap.org/data/2.5/weather?zip=87509,de&APPID=".urlencode($openweathermap_appid);
$url[1] = "http://api.aerisapi.com/forecasts/immenstadt,germany?client_id=".urlencode($aeris_client_id)."&client_secret=".urlencode($aeris_client_secret)."&from=today&to=+6days";
$response = file_get_contents($url[1]);
+5 -2
View File
@@ -6,8 +6,11 @@
include("incs/pChart/pChart.class");
$dbconn = mysqli_connect("localhost","m0","ENTFERNT");
mysqli_select_db($dbconn,"systemstats");
// Zugang zur Statistik-Datenbank steht in der externen Config
require_once("incs/settings.php");
readsettings();
$dbconn = mysqli_connect($stats_mysql_server, $stats_mysql_user, $stats_mysql_pw) or die("Keine Verbindung zur Statistik-Datenbank.");
mysqli_select_db($dbconn, $stats_mysql_db);
$qry = mysqli_query($dbconn, "SELECT DATE_FORMAT(datetime, '%d.%m.%y') AS datetime, MAX(percent) AS value FROM hdd WHERE datetime > DATE_SUB(NOW(), INTERVAL 31 DAY) GROUP BY DATE_FORMAT(datetime, '%d.%m.%y') ORDER BY DATE_FORMAT(datetime, '%y%m%d') ASC") or die(mysqli_error($dbconn));
// Dataset definition
+21 -1
View File
@@ -30,7 +30,15 @@ if(!file_put_contents (CONFIG_PATH.CONFIG_FILE,
global $firma;
global $dbconn;
global $geodbconn;
global $smtp_konten;
global $stats_mysql_server;
global $stats_mysql_user;
global $stats_mysql_pw;
global $stats_mysql_db;
global $openweathermap_appid;
global $aeris_client_id;
global $aeris_client_secret;
$instanz = '.var_export(INSTANZ, true).';
$dbconn = 0;
$geodbconn = 0;
@@ -40,6 +48,18 @@ if(!file_put_contents (CONFIG_PATH.CONFIG_FILE,
$mysql_server = '.configWert("mysqlserver").';
$mysql_opengeodb = '.configWert("opengeodb").';
$firma = '.configWert("firma", true).';
// Von Hand zu pflegen: SMTP-Zugänge je Firma, "*" für alle übrigen
$smtp_konten = array(
"*" => array("user" => "", "pw" => ""),
);
$stats_mysql_server = "localhost";
$stats_mysql_user = "";
$stats_mysql_pw = "";
$stats_mysql_db = "systemstats";
$openweathermap_appid = "";
$aeris_client_id = "";
$aeris_client_secret = "";
?>'))
{
$err= error("Konfiguration konnte nicht geschrieben werden!");