Upload via GUI (335 Dateien)
This commit is contained in:
@@ -171,6 +171,53 @@ try {
|
||||
$gc = (int) $gcBody;
|
||||
@unlink($pj);
|
||||
$check($gc >= 30 * 60 + 600, 'PHP räumt Sitzungsdaten erst nach der Inaktivitätszeit plus Reserve auf (gc_maxlifetime ' . $gc . ' s)');
|
||||
|
||||
// G: Anmeldeseite, deren Sitzung serverseitig aufgeräumt wurde (zu lange offen): freundliche Meldung statt „CSRF-Token ungültig“, danach klappt die Anmeldung
|
||||
foreach ([['/staff/login.php', 'chef@test.de', 302], ['/login.php', 'kunde@test.de', 200]] as [$loginPath, $mail, $okStatus]) {
|
||||
$gj = tempnam(sys_get_temp_dir(), 'ses');
|
||||
[, $page] = $call('GET', $loginPath, $gj, $USER_NAV);
|
||||
preg_match('/name="csrf_token" value="([a-f0-9]+)"/', $page, $tk);
|
||||
@unlink($sessionFile($gj)); // der Server hat die Sitzung inzwischen gelöscht
|
||||
[$s, $body] = $call('POST', $loginPath, $gj, $USER_NAV, ['csrf_token' => $tk[1] ?? '', 'email' => $mail, 'password' => 'Sehr-Sicher-1234']);
|
||||
$check($s === 200 && str_contains($body, 'zu lange geöffnet') && !str_contains($body, 'CSRF-Token fehlt'), "{$loginPath}: nach aufgeräumter Sitzung kommt eine freundliche Meldung statt der CSRF-Fehlerseite (HTTP {$s})");
|
||||
preg_match('/name="csrf_token" value="([a-f0-9]+)"/', $body, $tk2);
|
||||
$check(($tk2[1] ?? '') !== '' && ($tk2[1] ?? '') !== ($tk[1] ?? ''), "{$loginPath}: die Meldung bringt ein neues, gültiges Formular mit");
|
||||
if ($loginPath === '/staff/login.php') {
|
||||
[$s2, , $loc2] = $call('POST', $loginPath, $gj, $USER_NAV, ['csrf_token' => $tk2[1] ?? '', 'email' => $mail, 'password' => 'Sehr-Sicher-1234']);
|
||||
$check($s2 === 302 && str_contains($loc2, 'reports'), 'zweiter Versuch mit dem neuen Formular meldet an (HTTP ' . $s2 . ')');
|
||||
}
|
||||
@unlink($gj);
|
||||
}
|
||||
// G2: Bei anderen Formularen bleibt die Prüfung streng (kein Umgehen des Schutzes)
|
||||
$gj = tempnam(sys_get_temp_dir(), 'ses');
|
||||
[$s, $body] = $call('POST', '/staff/login.php', $gj, $USER_NAV, ['csrf_token' => 'erfunden', 'email' => 'chef@test.de', 'password' => 'Sehr-Sicher-1234']);
|
||||
$check($s === 200 && str_contains($body, 'zu lange geöffnet'), 'ein falscher Token meldet nie an, auch nicht mit richtigem Passwort (HTTP ' . $s . ')');
|
||||
[$s, $body] = $call('POST', '/staff/profile.php', $gj, $USER_NAV, ['csrf_token' => 'erfunden']);
|
||||
$check(in_array($s, [302, 403], true), 'geschützte Formulare ohne gültigen Token werden weiter abgewiesen (HTTP ' . $s . ')');
|
||||
@unlink($gj);
|
||||
// H: Die Anmeldeseiten halten ihre Sitzung am Leben
|
||||
foreach (['/staff/login.php', '/login.php'] as $loginPath) {
|
||||
$gj = tempnam(sys_get_temp_dir(), 'ses');
|
||||
[, $page] = $call('GET', $loginPath, $gj, $USER_NAV);
|
||||
$check(str_contains($page, 'session_ping.php?check=1') && str_contains($page, '8 * 60 * 1000'), "{$loginPath}: ein kurzer Abruf alle 8 Minuten hält die Sitzung am Leben");
|
||||
@unlink($gj);
|
||||
}
|
||||
// I: Die Live-Anzeige neuer Tickets verlängert die Sitzung nie und endet mit ihr
|
||||
$jar = $login();
|
||||
[$s, $body] = $call('GET', '/staff/live_tickets.php?since=0', $jar, $POLL);
|
||||
$d = json_decode($body, true);
|
||||
$check($s === 200 && isset($d['counts']['open']), 'Live-Anzeige liefert bei angemeldeter Sitzung die Zahlen (HTTP ' . $s . ')');
|
||||
$setAge($jar, 29 * 60);
|
||||
$call('GET', '/staff/live_tickets.php?since=0', $jar, $POLL);
|
||||
$age = time() - (int) $lastActivity($jar);
|
||||
$check($age >= 29 * 60 - 3, 'Live-Anzeige verlängert die Sitzung nicht (Alter ' . $age . ' s)');
|
||||
$setAge($jar, 31 * 60);
|
||||
[$s, $body] = $call('GET', '/staff/live_tickets.php?since=0', $jar, $POLL);
|
||||
$check($s === 401 && str_contains($body, 'sessionExpired'), 'nach Ablauf der Sitzung antwortet die Live-Anzeige mit 401 (HTTP ' . $s . ')');
|
||||
@unlink($jar);
|
||||
[$s] = $call('GET', '/staff/live_tickets.php?since=0', $pj = tempnam(sys_get_temp_dir(), 'ses'), $POLL);
|
||||
$check($s === 401, 'ohne Anmeldung antwortet die Live-Anzeige mit 401');
|
||||
@unlink($pj);
|
||||
} finally {
|
||||
if (isset($webProc) && is_resource($webProc)) { proc_terminate($webProc); proc_close($webProc); }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user