PHP mit JavaScript aufrufen

home php

Mit Unity ganz ohne Vorkenntnisse eigene Spiele entwickeln   -  Nutzen Sie die geniale Game Engine, um eigene Spiele zu entwickeln! Von der ersten Scene bis zum komplexen Multiplayer-Spiel zeigt Ihnen Erfolgsautor Thomas Theis Schritt für Schritt, wie es geht. Mit dem integrierten C#-Kurs lernen Sie alle Objekte und Befehle direkt so kennen, wie Sie in Unity-Skripten aussehen - ganz ohne Vorkenntnisse und externe Software!

Wir sind Mitglied im Amazon.Partnernet und können mit Affiliate-Links den Betrieb der Webseite etwas unterstützen, für Sie als Leser ist das natürlich vollkommen kostenlos.

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.

Vorwort

Log-Mechanismen für Domains und Webseiten sind nichts neues und können in Web-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 wie folgt einzurichten, hier werden dann alle Logs aus Ihren anderen Domains zentral auflaufen. In den anderen Domains tragen Sie lediglich eine Zeile Java Script 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 Template Ihrer Webseite 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=DER-BEISPIEL-TITEL&slug=SEITEN-SEO-URL></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 Server-Variablen 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.

Alternativer Aufruf von PHP durch JavaScript

Natürlich ist es auch möglich PHP-Scripte aus einem laufenden JavaScript heraus aufzurufen, Sie können in etwa das folgende Script verwenden:

String frage   = "Welche form hat eine Brezel?"
InputStream in = new URL("http://domain.tld/frage.php?frage=" + frage).openStream();

Code

Dieser Aufruf und die Signatur sind öffentlich sichtbar, eventuell könnte sich daraus ein Sicherheitsrisiko entwickeln.

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 Java Script Request der rufenden Domains (das können verschiedene Domains sein, je nachdem wie viele Sie überwachen möchten).

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

Code

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.

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.


 28.01.2024    Kontakt@Oliver-Lohse.de    JavaScript PHP Remote Call

COBOL - Altsysteme warten und erweitern. Das umfassende Praxis-Handbuch   -  Dieses Buch richtet sich an erfahrene Entwickler objektorientierter Sprachen wie C++ oder Java. Es vermittelt die Funktionsweise der Programmiersprache COBOL, um die in zahlreichen Implementierungen auf unterschiedlichen Plattformen immer noch produktiv laufenden COBOL-Programme zu verstehen, zu warten und bei Bedarf mit zusätzlichen Funktionalitäten zu erweitern. Dafür bietet es Ihnen sowohl eine grundlegende Einführung in die Programmierung mit COBOL als auch eine thematisch gegliederte Referenz der Befehle mit praktischen Beispielen.

Wir sind Mitglied im Amazon.Partnernet und können mit Affiliate-Links den Betrieb der Webseite etwas unterstützen, für Sie als Leser ist das natürlich vollkommen kostenlos.

Weitere passende Beiträge

PHP mit JavaScript aufrufen

 pico  Call Remote


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.

Impressum


CMSWorkbench.de ist eine reine Entwickler-Webseite und dient vorwiegend als Wissensspeicher für die Entwicklung von CMS

Datenschutz


Die Webseite verwendet keinerlei Tracking- oder Speicher-Mechanismen, die Rückschlüsse auf Ihre IP oder das Leseverhalten zulassen

Affiliate


Wir sind Mitglied im Amazon Partnernet und können mit Affiliate-Links (* den Betrieb der Seite etwas unterstützen, für Sie ist das natürlich kostenlos

Kontakt


Sie können mit uns über eMail Kontakt aufnehmen, schreiben Sie an Kontakt@Oliver-Lohse.de