PHP-Programme mit JavaScript aus anderen Domains aufrufen

Möchten Sie einen Log-Mechanismus entwickeln den Sie leicht in jedes PICO Template einbinden können, dann ist JavaScript und PHP ideal dafür.

Juli 5, 2023 - Lesezeit: 6 Minuten

Inhalt

Vorwort

Log-Mechanismen für Domains und Webseiten sind nichts neues und können in PICO oder anderen Seiten leicht implementiert werden, das Web ist bisweilen voll mit guten Programmbeispielen. Jedoch möchte ich in diesem Beitrag eine andere Variante vorstellen, mit der Sie viele verschiedene Webseiten und Internetdomains an einer zentralen Stelle statistisch auswerten können. Dafür ist es erforderlich (sofern Sie mehrere Domains besitzen) eine freie Domain als Logger einzurichten, hier werden dann alle Logs aus Ihren anderen Domains zentral auflaufen. In den anderen Domains tragen Sie lediglich eine Zeile JavaScript Code ein, um den Logeintrags in der entfernten Domain zu starten. Ich habe für die Veranschaulichung die www.Domain-A.de als zu überwachende Webseite vorgesehen und www.Domain-B.de als zentrale Webseite die alle Logs verarbeitet.

JavaScript HTTP Request an PHP senden

Die folgende Zeile JavaScript-Code der Beispiel Domain www.Domain-A.de, können Sie in jedes beliebige Twig-Template des PICO CMS einhängen. Das JavaScript startet einen Request gegen ein PHP-Programm in www.Domain-B.de, welche beispielsweise als zentrale Log-Domain dient.

<script src=https://Domain-B.de/log.php?title={{current_page.title}}&slug={{current_page.id}}></script>

Dieser Java Script HTTP Request startet den entfernten PHP Log

Im Beispiel oben wird das Modul log.php in der Domain Domain-B.de aufgerufen. Dem PHP Programm werden die beiden Templatevariablen Title und Slug, also der Permalink und der echte Titel des Beitrags, mitgeteilt.

Die Domain-B.de dient in diesem Beispiel als zentrale Anlaufstelle für mehrere verschiedene Domains und sammelt alle Logs unter einer Domain zusammen, das ist praktisch für die spätere Analyse von Zugriffs-Statistiken aus verschiedenen Quellen und Webseiten - ist aber keine Bedingung für die Funktionsweise dieses Log-Mechanismus.

JavaScript HTTP Request mit PHP entgegen nehmen - Log-Script

Das Log-File ist recht simpel gehalten. In einer Eingangs-Struktur wird überprüft, ob ein Wert für title erfüllt ist, damit das Programm auch einen Log-Eintrag in www.Domain-B erzeugen kann, es entsteht die Datei log.txt.

<?php
    if (isset($_GET["title"])) {
        file_put_contents('log.txt', $_GET["title"].$_GET["slug"].PHP_EOL, FILE_APPEND | LOCK_EX)!==false;
    }
?>

Ein einfacher entfernter Log Mechanismus

Das PHP-Script erhält den Permalink und den Beitrags-Titel via GET aus den globalen Servervariablen ['title'] und ['slug'] aus der www.Domain-A.de. Die Inhalte stammen aus dem Twigtemplate der Templatevariablen der rufenden Domains (das können verschiedene Domains sein, je nachdem wie viele Sie überwachen möchten). Sofern Sie kein PICO CMS verwenden, können Sie diese mit festen Werten oder PHP-Variablen füllen.

Bedenken Sie bitte auch, das natürlich auch jeder andere Webseiten-Admin Ihren Logger aufrufen kann und das die Inhalte aus den Servervariablen durchaus schädlichen Code enthalten können, daher sollten Sie die Bereinigung und den Schutz des Loggers als nächstes angehen.

Allow-List - wer darf ein Log schreiben?

Wie bereits erwähnt, ist der Logger nicht sonderlich geschützt und jeder beleibige Webadmin könnte ihn aufrufen, daher sollten Sie eine allow-list erstellen, in der Sie die Domains eintragen, die auf den Logger zugreifen dürfen. Legen Sie eine einfache TXT-Datei an, zum Beispiel:

allow-list.txt

Tragen Sie dort mehrere Domains ein die Sie überwachen möchten und in denen Sie den eingangs beschriebenen JavaScript Request eingefügt haben. Der Inhalt könnte wie folgt aussehen:

https://www.gimp-handbuch.de/
https://www.cmsworkbench.de/
http://cms-workbench.de/
https://www.gimphandbuch.de/
https://www.nodemcu.de/
http://yamlcms.de/

Allowlist Beispiel

Sie müssen dabei auf die vollständige und korrekte URL-Schreibweise achten, denn Sie werden die Server Variable $_SERVER['HTTP_REFERER'] nutzen. Tragen Sie eine Domain je Zeile in die Datei ein. Ergänzen Sie jetzt das oben gezeigte PHP-Coding um einen einfachen IF-Zweig:

<?php
    $allow_list = file_get_contents('allow-list.txt');

    if (stripos($allow_list, $_SERVER['HTTP_REFERER']) !== false) {
        if (isset($_GET["title"])) {
            file_put_contents('log.txt', $_GET["title"].$_GET["slug"].PHP_EOL, FILE_APPEND | LOCK_EX)!==false;
        }
    }
?>

Sperrliste Allowlist, wer darf den Log schreiben

Durch diesen einfachen aber sehr wirkungsvollen Mechanismus schützen Sie Ihren Logger vor Aufrufen fremder User und stellen sicher, das dieser ausschließlich durch die von Ihnen registrierten Domains verwendet werden kann.

Zwar ist der Logger nun sicher gegen Aufrufe Dritter geschützt, jedoch stellen die globalen Server-Variablen title und slug noch ein Risiko dar, da in ihnen durchaus schadhafter Code transportiert werden kann. Diese Lücke müssen Sie jetzt ebenfalls noch schließen.

Sanitizer - Schadcode entfernen

Als Sanitizer (Desinfizierer) können Sie verschiedene PHP-Befehle nutzen. Am einfachsten geht es mit dem str_replace(), bei dem Sie selbst bestimmen können, welche gefährlichen Zeichenketten zerstört werden sollen. Ergänzen Das Script wie folgt:

<?php
    $allow_list = file_get_contents('allow-list.txt');

    $sanitize_title  = str_replace(array(';', '&', '$', '"'),'-', $_GET["title"]);
    $sanitize_slug   = str_replace(array(';', '&', '$', '"'),'-', $_GET["slug"]);

    if (stripos($allow_list, $_SERVER['HTTP_REFERER']) !== false) {
        if (isset($_GET["title"])) {
            file_put_contents('log.txt', $sanitize_title.$sanitize_slug.PHP_EOL, FILE_APPEND | LOCK_EX)!==false;
        }
    }
?>

Sanitizer entfernt schädlichen Code

Sie haben den Logger in der www.Domain-B.de nun sicher gegen Angriffe gemacht und können Ihn in verschiedenen Webseiten verwenden. Tragen Sie das JavaScript-Code Segment dort ein wo Sie eine Auswertung vornehmen möchten. Wenn Sie PICO-CMS nutzen, sollten Sie es mindestens in den beiden Templates post.twig und index.twig weit oben im Kopf eintragen (sofern sich Ihr Template und Thema an diesen Standard hält).

Einen Datenbank-Log schreiben

Möchten Sie statt eines simplen Log-Files einen Eintrag in eine SQL-Datenbank vornehmen, dann müssen Sie den Code wie folgt anpassen:

<?php
    $allow_list = file_get_contents('allow-list.txt');

    $host_name = 'IHR-DATENBANK-HOST';
    $database  = 'IHRE-DATENBANK';
    $user_name = 'IHR-DATENBANK-USER';
    $password  = 'IHR-DB-KENNWORT';
    $timestamp = date('Y-m-d');
    $ip        = $_SERVER['REMOTE_ADDR'];
    $link      = new mysqli($host_name, $user_name, $password, $database);

    if ($link->connect_error) {die('Verbindung zum SQL Server fehlgeschlagen: '. $link->connect_error);}

    $sanitize_title  = str_replace(array(';', '&', '$', '"'),'-', $_GET["title"]);
    $sanitize_slug   = str_replace(array(';', '&', '$', '"'),'-', $_GET["slug"]);

    if (stripos($allow_list, $_SERVER['HTTP_REFERER']) !== false) {
        if (isset($_GET["title"])) {
            $sql    = "INSERT INTO statistik (domain, title, slug, ip, date) VALUES ('".$_SERVER['HTTP_REFERER']."','".$sanitize_title."','".$sanitize_slug."','".$ip."','".$timestamp."')";
            $result = $link->query($sql);
        }
    }
?>

Vollständiger Programmcode des entfernten Loggers

Tragen Sie im Kopfbereich die Kenndaten Ihrer SQL-Datenbank ein, die nötigen Informationen erhalten Sie durch Ihren Host-Provider bzw. können Sie selbst im Backend Ihres Domain-Centers einsehen. Tauschen Sie den Befehl für das Schreiben auf Festplatte durch den SQL aus.

Der Datenbankzugriff setzt eine Tabelle mit dem Namen statistik und den Feldern domain, title, slug, ip und date voraus. Die Datenbanktabelle können Sie mit Hilfe des Admin-Tools phpMyAdmin leicht selbst erstellen.

Noch ein wichtiger Hinweis: Das hier gezeigte Coding ist ein Beispiel. Für die Sicherheit Ihrer Webseiten und Ihres Contents übernimmt CMSWorkbench.de keinerlei Haftung, Sie sind als Admin für Ihren Inhalt verantwortlich.

Schlagworte:

Beiträge in der Kategorie "Pico":

Zufällige Affiliate-Links ohne externe Plugins mit Hilfe von YAML und der Templatesprache Twig in Pico CMS realisieren, das ist sogar wirklich sehr einfach.

Die YAML Syntax anhand einer Liste erläutert, die beispielsweise Affiliate oder CTA Links aufnimmt und die vom Twig-Template ausgelesen werden können.

Das Pico CMS mit Twig hat ein Leerzeichen-Problem, denn Leerzeichen (Whitespaces) vor Templatevariablen werden von der internen Template Engine Twig verschluckt

Zählen Sie in der Template-Engine Twig eine Counter Variable im Template hoch oder runter und regeln damit Kontrollzwecke in Ihren eigenen Templates.

Top-Level vs Sub-Level Menüs in Pico CMS. Zeigen Sie immer die oberen Menüebene oder die aktuell untergeordneten Menüebene an. Mit diesem Code geht es

Implementieren Sie mit einem Meta-Feld mit geringem Aufwand ein Teaser oder Kategoriebild in der Startseite des Pico CMS bzw. in einem Beitrag als Artikel-Bild.

Für das Pico CMS erzeugt dieses Codebeispiel eine Tagliste, die Beiträge mit gleichen Tags auflistet. Binden Sie diese Twig Template in einen Beitrags ein.

Möchten Sie einen Zurück-Button in jedem Beitragsverzeichnis im PICO CMS implementieren, dann lesen Sie diesen Beitrag und nutzen das folgende Coding.

Das Pico CMS bietet bereits eine ganze Menge an Meta-Attributen die Sie bereits gut nutzen können. Eine vollständige Attribut-Liste zeigt dieser Beitrag.

Versuchen Sie sich bei der Erstellung von Beiträgen in PICO an die SEO Vorgaben von Google zu halten, dann kannt dieser Trick das Ranking bei Google verbessern

Sie haben Probleme mit Ihrem SEO? Wer nicht! Dann kann Ihnen dieses kleine Coding helfen eine korrekte Überschriftenstruktur für Suchmaschinen zu erstellen

Dieser Beitrag zeigt Ihnen, wie Sie mit wenigen Handgriffen einen Seitenpaginator und Blätterfunktion in Ihre CMS-Webseite bzw. Web-Blog implementieren.

if-Kontrollstrukturen im Twig-Template helfen bestimmte Seiten auszuschließen, denn nicht alle Seiten sollen beispielsweise einen Autor oder das Datum zeigen

Dieser Beitrag zeigt Ihnen, wie Sie ein erstes Plugin für PICO entwickeln. Die wenigen Zeilen Code verdeutlichen die Arbeitsweise der Plugins in diesem CMS

Der Beitrag zeigt, wie Sie mit dem Plugin PicoPagesList.php weitere Beiträge des aktuellen Ordners azeigen lassen können, um diese in ein Menü aufzunehmen.

Möchten Sie einen Log-Mechanismus entwickeln den Sie leicht in jedes PICO Template einbinden können, dann ist JavaScript und PHP ideal dafür.

So finden Sie heraus, welche Beiträge von der Suchmaschine angefordert werden aber nicht mehr im PICO CMS existieren

Fügen Sie neue Meta-Attribute in Pico hinzu oder entfernen diese, dann ist es sinnvoller zuvor auf deren Existenz abzufragen, das vermeidet Fehlermeldungen

So legen Sie die wichtigen Metadaten eines jeden Pico-Beitrags an. Es ist ein reguläres MD-File, das Sie mit jedem ASCII-Editor leicht selbst anlegen können.

Dieser Beitrag zeigt Ihnen, wie Sie einen Bildindex in Markdown anlegen und im Texte auf diese Bilder leicht referenzieren können. Dies ist eine Erleichterung.

Der aktuelle Index des Pico Loops kann für die Steuerung unterschiedlicher Formate abgefragt werden, nutzen Sie das Tag loop.index der Twig Template Engine.

Erstellen Sie einen einfachen Hitcounter und Besuchszähler als Pico Plugin. Dieser Counter zählt Aufrufe von Menschen oder Robots der Suchmaschinen.

Statt alle Blogbeiträge im Loop aufzulisten, können Sie auch einen ganz konkreten Beitrag anzeigen und dessen Existenz zuvor prüfen. Dieses Script zeigt es.

Dieser Beitrag zeigt Ihnen die einfache Installation und Inbetriebnahme des freien PICO CMS ist. Es sind nur wenige Handgriffe und wenig Voraussetzungen nötig.

Dieser Beitrag soll Ihnen einen Eindruck vermitteln, wie ein einfacher PICO Beitrag in Markdown aussieht. Sie benötigen dafür einen beliebigen ASCII Editor.

Die Datei config.conf speichert im YAML-Format Variablen ab auf die Sie aus den Templates zugreifen und verarbeiten können. Dies ist das Setup der Webseite

Dieser Beitrag zeigt Ihnen, wie Sie dynamische Templates anlegen, um damit den Content aus verschiedenen Ordner in Ihrer Webseite anzeigen zu können.

Eine Breadcrumb Navigation können Sie leicht mit Befehlen des Twig in PICO CMS leicht selbst erzeugen - so gehts.

Mit der Markdown Syntax können Sie auch einen klickbaren Bildlink im Text eintragen. Es ist eine Schachtelung verschiedener bekannter Markdown Format-Befehle.

Für die Einbindung eines Menüs gibt es kostenlose Plugins, Sie können dies auch mit Mitteln des Templates umsetzen und verzichten auf unsichere Plugins

Mit wenigen Handgriffen ändern Sie die Standard-Beitragssortierung in PICO individuell ab. Passen Sie diese Einstellung in der YAML-Datei config.yml an.

Wollen Sie im Rahmen des Twig-Templatings unter PICO die Anzahl der Beiträge in einem Ordner ermitteln, dann ist dieser Code die Lösung

Kategorien

Automad

Das kostenlose Flat File CMS Automad bietet bereits nach der Installation auf dem Server das beste Layout unter allen CMS am Markt.

Bludit

Das kostenlose Flatfile CMS Bludit ist das beliebteste Content Management System, das dem großen WordPress sehr nahe kommt, jedoch deutlich mehr Sicherheit bietet.

CMS

In dieser Rubrik geht es um übergreifenden Themen aus dem Bereich der Content Management Systeme.

Coast

Coast ist ein CMS aus deutscher Feder und ist mit einem exzellenten HTML/PHP Frontend-Editor zu vergleichen, die Daten werden direkt in der HTML-Datei gespeichert.

GetSimple

Das kostenlose Content Management System GetSimple verspricht genau das, was der Name andeutet, ein stabiles Flat File CMS auf der Basis von XML-Dateien.

GRAV

Das kostenlose Content Management System GRAV gehört zu den komplexesten CMS, da es den größten Funktionsumfang mitbringt.

Handlebars.JS

Handlebars.js ist eine kostenlose JavaScript Template-Engine mit der einfache Webseiten oder Prototypen leicht und schnell erzeugt werden können.

htaccess

Die .htaccess ist die wohl wichtigste und mächtigste Datei, über die der Server seinen Umgang mit den Daten und Besuchern steuert.

Java

Java ist die strategische Programmiersprache für verteilte Anwendungen im Internet oder auch in der Client-Server Architektur und sogar auf dem Host.

Monstra

Das CMS Monstra ist ein überaus gelungenes und sauber entwickeltes CMS mit Admin-Backend und Flat File Datenbank.

PHP

PHP ist die strategische Programmiersprache des Internets, mit PHP geht alles und ohne PHP nichts! Allerdings ist PHP nicht auf lokalen Client-Umgebungen verbreitet (aber möglich).

Pico

Das CMS Pico ist derzeit das ausgereifteste und einfachste headless CMS für den Einsatz großer Mengen an MarkDown-Files (Content).

Smarty

Smarty ist eine Template-Engine auf Basis der Programmiersprache PHP und ist in der Lage HTML-Vorlagen (Templates) dynamisch mit Content zu versorgen.

Typemill

Typemill ist zunächst ein ganz normales Flat File CMS, entfaltet jedoch sein wahres Potenzial mit einigen besonderen Plugins, die es zum kraftvollen Publishing-Tool macht.

WonderCMS

WonderCMS ist das mit Abstand kleinste CMS das es derzeit kostenlos gibt. WonderCMS kommt mit einem PHP-Script und einer JSON-Datenbank aus und bietet ein Backend.

WordPress

Das datenbankbasierte Content Management System WordPress ist das beliebteste CMS und hält die meisten Installationen - ist allerdings auch das am meisten attackierte System.

Derzeit sind noch keine passenden Beiträge vorhanden.