Compare commits

...
1 Commits
Author SHA1 Message Date
adminandClaude Opus 5 c59e7fb393 Sicherheit: AJAX-Endpunkte und Statistik nur mit Anmeldung
Keiner der AJAX-Endpunkte hat einen Login geprueft. Ohne Anmeldung liessen
sich Kunden, Adressen und Rechnungen durchsuchen, und ajax/autosave.php
setzt $_POST ungeprueft in SQL (SQL-Injection ohne Login).

- incs/connectmysql.php und ajax/auto/connectmysql.php, die alle
  AJAX-Endpunkte laden, antworten ohne gueltige Session mit 403
- stats.php verlangt eine Anmeldung
- db-backup.php und clean_db.php laufen nur noch per Kommandozeile;
  ueber den Webserver konnte jeder einen Datenbank-Dump anstossen

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 10:30:30 +02:00
5 changed files with 26 additions and 0 deletions
+6
View File
@@ -2,6 +2,12 @@
require_once("../../incs/constants.php"); require_once("../../incs/constants.php");
session_name(SESSION_NAME); session_name(SESSION_NAME);
session_start(); session_start();
// Alle AJAX-Endpunkte laden diese Datei: ohne Anmeldung gibt es keine Daten.
if(($_SESSION["login"] ?? "") !== "valid")
{
http_response_code(403);
exit("Nicht angemeldet.");
}
require_once("../../incs/settings.php"); require_once("../../incs/settings.php");
$settings=readsettings(); $settings=readsettings();
if($settings == "valid") if($settings == "valid")
+3
View File
@@ -1,4 +1,7 @@
<?php <?php
// Wartungsskript: nur per Kommandozeile, nie über den Webserver
if(PHP_SAPI != "cli")
exit;
require_once("./incs/constants.php"); require_once("./incs/constants.php");
session_name(SESSION_NAME); session_name(SESSION_NAME);
session_start(); session_start();
+3
View File
@@ -1,4 +1,7 @@
<?php <?php
// Nur per Kommandozeile (Cronjob), nie über den Webserver
if(PHP_SAPI != "cli")
exit;
/* /*
* Datenbank-Backup (Cronjob). * Datenbank-Backup (Cronjob).
* *
+6
View File
@@ -2,6 +2,12 @@
require_once("../incs/constants.php"); require_once("../incs/constants.php");
session_name(SESSION_NAME); session_name(SESSION_NAME);
session_start(); session_start();
// Alle AJAX-Endpunkte laden diese Datei: ohne Anmeldung gibt es keine Daten.
if(($_SESSION["login"] ?? "") !== "valid")
{
http_response_code(403);
exit("Nicht angemeldet.");
}
require_once("../incs/settings.php"); require_once("../incs/settings.php");
$settings=readsettings(); $settings=readsettings();
if($settings == "valid") if($settings == "valid")
+8
View File
@@ -1,4 +1,12 @@
<?php <?php
require_once("incs/constants.php");
session_name(SESSION_NAME);
session_start();
if((($_SESSION["login"] ?? "") !== "valid"))
{
http_response_code(403);
exit("Nicht angemeldet.");
}
error_reporting(E_ERROR | E_WARNING | E_PARSE); error_reporting(E_ERROR | E_WARNING | E_PARSE);
// Standard inclusions // Standard inclusions