-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathindex.php
67 lines (55 loc) · 2.59 KB
/
index.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?php
namespace Poznavacky;
use Poznavacky\Models\Security\AntiCsrfMiddleware;
use Poznavacky\Models\Statics\Settings;
use Poznavacky\Models\Logger;
use Poznavacky\Controllers\RooterController;
use \ErrorException;
//Nastav dependencies pomocí composeru
require __DIR__.'/vendor/autoload.php';
//Definuj a nastav autoloader tříd
function autoloader(string $name): void
{
//Nahraď zpětná lomítka (používaných v namespacové cestě) běznými lomítky (používaných pro navigaci adresáři)
$name = str_replace('\\', '/', $name);
//Odstraň z cesty ke třídě kořenovou složku (v té už je tento soubor)
if (strpos($name, '/') !== false) {
$folders = explode('/', $name);
unset($folders[0]);
$name = implode('/', $folders);
}
$name .= '.php';
require $name;
}
spl_autoload_register('Poznavacky\\autoloader');
//Obnov session a nastav kódování
session_start();
mb_internal_encoding('UTF-8');
//Zkontroluj, zda je navázáno zabezpečné připojení a případně přesměruj
if (Settings::PRODUCTION_ENVIRONMENT) {
if (!(isset($_SERVER["HTTP_X_FORWARDED_PROTO"]) && $_SERVER["HTTP_X_FORWARDED_PROTO"] === "https")) {
(new Logger(true))->notice('Uživatel se pokusil odeslat požadavek na adresu {uri} z IP adresy {ip}, avšak nepoužil zabezpečené SSL připojení',
array('uri' => $_SERVER['REQUEST_URI'], 'ip' => $_SERVER['REMOTE_ADDR']));
header('Location: https://'.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']);
header('Connection: close');
exit();
}
}
//Zkontroluj a obnov CSRF token (toto také přesměruje nepřihlášené uživatele pokoušející se přistoupit na nějakou menu stránku na index)
$antiCSRF = new AntiCsrfMiddleware();
$antiCSRF->verifyRequest(); //V případě chyby (včetně vypršení sezení) je na tomto řádku skript zastaven
//Inicializuj dočasné úložiště
$_SESSION['temp'] = array();
//Zpracuj URL adresu a získej data pro zobrazení
$rooter = new RooterController();
$rooter->process(array($_SERVER['REQUEST_URI']));
//Vymaž dočasné úložiště
unset($_SESSION['temp']);
//Zobraz vygenerovanou webovou stránku
try {
$rooter->displayView();
} catch (ErrorException $e) {
(new Logger(true))->emergency('Uživatel odeslal požadavek na URL adresu {url} z IP adresy {ip}, avšak stránka mu nemohla být zobrazena kvůli selhání ošetření proti XSS útoku',
array('url' => $_SERVER['REQUEST_URI'], 'ip' => $_SERVER['REMOTE_ADDR']));
echo "Systém má aktuálně nějaké potíže. Kontaktujte prosím webmastera a zkuste akci opakovat později.";
}