About CleanCMS
Dieses extrem leichtgewichtige, im MVC-Design Pattern erstellte Content Management System, besitzt ein Minimum an externen Abhängigkeiten zu unsicheren Produkten oder Bibliotheken von Drittanbietern. CleanCMS ist dennoch voll ausgestattet und besitzt einen Template-Parser, einen PHP-Router, einen Shortcode-Parser, Plugins, preFilter, postFilter, RateLimiter und einen Markdown-Parser. Darüber hinaus ist CleanCMS rasend schnell.
Anmerkung vom Projekt: Der Versuch einen kleinen und leichtgewichtigen Markdown-Parser zu entwickeln erbrachte nicht das gewünschte Resultat, sodass sich das Projekt dazu entschlossen hat, die bekannte Bibliothek
Parsedown
undParsedownExtra
als einzige externe Abhängigkiet einzubinden. Der ursprünglich konzipierte Markdown-Parser übernimmt nun die Aufgabe des Shortcut-Parsers.
PHP-Router
Statt der Verwendung eines externen PHP-Routers, verwendet CleanCMS einen eigens entwickelten Router, der langlebig, leicht zu verstehen und preiswert zu warten ist. Die Funktionsweise orientiert sich dabei an bekannten Patterns wie sie beispielsweise in Flight-Microframework oder Lemonade bekannt sind.
Template-Engine
Aus Sicherheitsgründen unterstützt, die eigens für CleanCMS entwickelte Template-Engine, keine Einbettung von PHP-Tokens. Sofern dynamische Inhalte in Templates eingebunden werden sollen, können diese mittels Plugins, preFilters oder postFilter einfach eingebunden werden. Der Core des CMS bleibt dadurch klein un kompakt und kann beliebig modular erweitert werden.
Shortcut Parser
CleanCMS unterstützt die Verwendung so genannter Shortcuts im Template und/oder in Beitragstexten. Mit solchen Schortcuts können wiederkehrende HTML- oder Textblöcke simpel eingebettet werden aber auch JavaScripte können individuell in Texte und Artikel eingehängt werden, um beispielsweise die beliebte JavaScript Bibliothek Chartist, für die Darstellung von Charts, nutzen zu können.
Angriffsvektor ist Null
Durch den radikalen Verzicht auf externe Bibliotheken und den Einsatz von minimalem Programmcode, ist der Angriffsvektor dieses Content Management Systems gleich Null.
Der Einsatz von Middleware
CleanCMS ist mit einem einfachen PHP-Router ausgestattet, der es ermöglicht so genannte Middleware zu verwenden. Dabei handelt es sich im wesentlichen um registrierte Routinen, die explizit vor dem Routing der User-Anfragen abgearbeitet werden. Mit Hilfe dieser Funktionen können diverse Prüfungen und Checks vor der Abarbeitung des User-Requests ausgeführt werden.
Prüfung auf Login
Ein wesentliches Einsatzgebiet von Middleware ist die Prüfung, ob Besucher am System angemeldet sind, indem die Server-Variable $_SESSION['user']
geprüft wird.
$router->addMiddleware(function($method, $uri) {
if (!isset($_SESSION['user'])) {
http_response_code(401);
echo "Unauthorized";
return false;
}
return true;
});
Code
Sofern der Besucher nicht angemeldet ist, liefert die Middleware false und der Router stoppt die Abarbeitung des Prozesses.
CORS Anfragen (Cross Orign Anfragen)
Ein weiteres Einsatzgebiet für Middleware sind die CORS-Anfragen, um dem Browser mitzteilen, das sie Requests von einer anderen Domain akzeptieren können.
$router->addMiddleware(function($method, $uri) {
header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
return true;
});
Code
Rate Limiting
Der Schutz vor Angriffen oder zu vielen Anfragen von ein und der selben IP-Adresse, können mit Middleware abgefangen und unterbunden werden. Insbesondere werden Zugriffe duch künstliche Intelligenz, Bots und Spider immer relaventer und Betreiber von Webseiten können sich mit einem RateLimiter effektiv gegen ungefragten Datenklau schützen.
$router->addMiddleware(function($method, $uri) {
$ip = $_SERVER['REMOTE_ADDR'];
if (!RateLimiter::allowRequest($ip)) {
http_response_code(429);
echo "Too Many Requests";
return false;
}
return true;
});
Code
Liefert der RateLimiter
den logischen Wert true
für die entsprechende IP-Adresse zurück, stoppt die Verarbeitung des Systems und der Response-Code 429 wird gesendet.
CleanCMS nutzt einen solchen RateLimiter, um massenhafte automatisierte Zugriffe oder Angriffsversuche zu erkennen und wirksam zu verlangsamen. Das Messintervall ist auf 60 Sekunden festgelegt und erlaubt in dieser Zeitspanne maximal 20 Requests. Erst nach Ablauf des Intervalls von 60 Sekunden, sind weitere 20 Zugriffe möglich. Diese Einstellung würde einem natürlichen Leser und Besucher der Webseite entsprechen.
URL Sanitizer
Das Bereinigen der URL von schadhaften Inhalten kann ebenfalls durch Middleware verarbeitet werden.
$router->addMiddleware(function($method, $uri) {
$_GET = filter_input_array(INPUT_GET, FILTER_SANITIZE_STRING);
$_POST = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
return true;
});
Code
Vorteile der Middleware: Einmal definiert, kann Middleware auf viele Routen angewendet werden. Änderungen an einer Middleware wirken sich auf alle relevanten Routen aus. Trennung von Logik, die vor der Routenverarbeitung ausgeführt werden soll. Durch Middleware kann der Router flexibel anpasst werden und wichtige Vorverarbeitungsaufgaben effizient implementiert werden.