Logo

PHP mit JavaScript 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.

Magnetisches Smart Watch Schnellladegerät

Magnetisches Smart Watch Schnellladegerät - ⚡ Multifunktionales 2 in 1 Schnellladegerät ⚡ Dank seines kompakten Designs ist es kompatibel mit iWatch 7, 6, 5, 4, 3, 2, 1 einschließlich 38mm 40mm 42mm 44mm Version und kompatibel mit iPhone 13, 12, 11, Max, XR, XS, X, 7, 8 und iPad Serie ⚡ Das 2 in 1 Ladekabel kann Ihre Smartwatch und Ihr Telefon gleichzeitig aufladen. Hinweis

kaufen...
Automad Bludit Coast GetSimple GRAV Handlebars Java PHP Pico Smarty Templating Typemill WonderCMS WordPress yamlCMS

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.

Passend:


Ein Bludit Plugin installieren ganz einfach und schnell

Ein wenigen Schritten installieren Sie ein Bludit Plugin aus dem Internet auf Ihrer eigenen Webseite. Der Beitrag zeigt wie das geht und was benötigt wird

Democode und Beispieltemplate für Handlebars in JavaScript

Dieser Beitrag zeigt ein einfaches Demo Template für die JavaScript basierte Template Engine Handlebars. Dieses Template ist sogar offline funktionsfähig.

Welchen Sinn machen JavaScript Template Engines heutzutage?

Man darf sich durchaus fragen welchen Sinn Template-Engines in JavaScript machen, da diejenigen User zunehmen, die das JavaScript im Browser deaktivieren.

PHP mit JavaScript 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.

TinyMCE läuft nicht im Standardmode im Bludit CMS

Der TinyMCE läuft nicht im Standardmode, statt dessen ist der MarkDown Parser aktiviert. Diese Meldung erhalten Sie oft wenn JavaScripte in Plugins stören.

Java Logger schreiben um Debug-Informationen zu speichern

So genannte Logger schreiben wertvolle Informationen zur Laufzeit für den Entwickler in eine Log-Datei. Die Informationen dienen der Fehleranalyse und dem Debug.

Das tree.php Snippet für eine Baumstruktur in Automad CMS

Erstellen Sie im CMS Automad eigene Templates, dann sollten Sie einen Blick auf diese Ordner werfen, denn sie sind maßgeblich für das Template wichtig.

Das Script edit-content.php im Bludit CMS individuell anpassen

Möchten Sie den Backend-Editor des Autors oder Admin individuell anpassen? Dann finden Sie hier den richtigen Pfad zur Programm-Source edit-content.php.

Einfacher SPAM Schutz im Kontaktformular für Bludit CMS

Wenn Sie das Bludit-Plugin Contact3 nutzen, können Sie in diesem Plugin eine einfache und wirkungsvolle Blackliste einbauen, die den Inhalt Ihrer Mail prüft

Ein Array in der de_DE.json des Bludit CMS anlegen

Legen Sie ein Array in der Sprachdatei de_DE.json des Templates an und greifen aus dem Template auf einzelne Key Value Paare zu um Affiliate Links zu erzeugen

Die Methode User() für Abfragen im Bludit CMS nutzen

Greifen Sie mit der Methode User() auf Attribute des angemeldeten und registrierten Benutzers zu und zeigen Namen, Avatare oder Kontaktdaten unter Beiträgen an

E-Mail mit PHP lesen, mit PHP auswerten und im Posteingang löschen

Mit diesem PHP Script lesen Sie eine Mail in Ihrem Postfach, werten den Inhalt mittels PHP aus und löschen im Anschluss die Mail aus dem Posteingang mit PHP.

Ein Heredoc-Parser und Mini CMS mit PHP zum Templating erstellt

Dieser Beitrag zeigt einen Heredoc Template Parser und mini CMS, erstellt in PHP, unter Nutzung der Heredoc-Syntax. Content, Template und Parser in einer Datei.

Die kleinste PHP Template-Engine und kleinstes CMS der Welt

Das ist die kleinste PHP Template-Engine, bzw. das kleinste PHP-CMS der Welt, erstellt mit der Programmiersprache PHP und 7 Zeilen Code.

Eine einfache PHP FlatFile Projekt und Vorhaben DB

In diesem Beitrag können Sie eine kleine FlatFile Projekt Datenbank herunterladen. Eine Beispielimplementierung in Anlehnung an die FlatFileDB von H.Wiledal

Kleinster PHP Template Parser mit Heredoc Syntax der Welt

Das ist die kleinste PHP-Template-Engine bzw der kleinste Template-Parser in PHP, der mit Heredoc Syntax arbeitet. Die Heredoc Syntax ist ideal für kleine Prototypen.

Die richtige Wahl der Templatesprache Templating Tipps

In welcher Schreibweise sollten Sie CMS Templates erstellen? Gemischt HTML und PHP oder doch lieber waschechtes PHP? Dieser Beitrag erleichtert den Einstieg.

Ein neues Datenbanfeld für WonderCMS in der json-DB anlegen

Mit diesem Trick legen Sie neue Datenbank-Felder in der JSON-Datenbank des WonderCMS vollkommen automatisiert an - mit nur einer Codezeile im WonderCMS Theme.

th3_alpha.php im WordPress CMS Log und die Beudeutung

Das WordPress Plugin steht im Verdacht Malware zu enthalten. In unterschiedlichen Foren im Netzt sind dazu widersprüchliche Infos zu finden - es ist abzuwarten

Was ist yamlCMS - yamlCMS ist nicht zu hacken! Glauben Sie nicht?

yamlCMS ist mein Beitrag und meine eigene Vorstellung an eine sichere Webseite auf Basis eines Flat File CMS mit lesbarer Datenbankstruktur ohne 'Firlefanz'.


Meta: Instagram CMSWorkbench.de GIMP-Handbuch.de Kontakt Impressum Datenschutz