<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>translation strings Archiv - Homepage nach Preis - Webseite erstellen lassen</title>
	<atom:link href="https://homepage-nach-preis.de/wort/translation-strings/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>★ Responsive Webdesigner Homepage erstellen lassen, bereits ab 299 Euro professionelle Webseite. ✓ Google-Optimiert ✓ Mobil-Optimiert &#124; Webdesign &#38; Seo</description>
	<lastBuildDate>Sun, 16 Jul 2023 23:13:31 +0000</lastBuildDate>
	<language>de</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://homepage-nach-preis.de/wp-content/uploads/2021/02/cropped-icon-150x150.png</url>
	<title>translation strings Archiv - Homepage nach Preis - Webseite erstellen lassen</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>WordPress Plugin multisprachig erstellen</title>
		<link>https://homepage-nach-preis.de/2023/07/17/wordpress-plugin-multisprachig-erstellen/</link>
					<comments>https://homepage-nach-preis.de/2023/07/17/wordpress-plugin-multisprachig-erstellen/#respond</comments>
		
		<dc:creator><![CDATA[Homepage-nach-Preis]]></dc:creator>
		<pubDate>Sun, 16 Jul 2023 23:08:51 +0000</pubDate>
				<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Wordpress Code]]></category>
		<category><![CDATA[multisprachig]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[translation strings]]></category>
		<category><![CDATA[webseite]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://homepage-nach-preis.de/?p=7912</guid>

					<description><![CDATA[<p>Um ein WordPress Plugin multisprachig zu machen und Translationstrings (esc_html__) sowie eine Textdomain zu verwenden, kannst du den folgenden Anleitungsschritten folgen: 1. Definiere die Textdomain für dein Plugin. Füge den folgenden Code am Anfang deiner Plugin-Haupt-Datei hinzu: /** * Plugin Name: Mein Plugin * Text Domain: mein-plugin-textdomain */ 2. Erstelle eine Übersetzungsdatei (`.pot`) für dein Plugin. Du kannst ein Übersetzungsprogramm wie Poedit oder Loco-Translate verwenden. 3. Füge Translationstrings (`esc_html__`) in deinen Plugin-Code ein. Hier ist ein Beispiel: echo esc_html__(&#x27;Willkommen auf meiner Website&#x27;, &#x27;mein-plugin-textdomain&#x27;); Stelle sicher, dass du bei allen Strings dieselbe Textdomain (`mein-plugin-textdomain`) verwendest. 4. Erstelle Übersetzungsdateien für jede Sprache, die du unterstützen möchtest. Du kannst die .pot-Datei als Vorlage verwenden und Übersetzungen für jede Sprache hinzufügen. Speichere die Übersetzungsdateien anschließend im Ordner Languages deines Plugins. Der Ordner sollte &#8211; im besten Fall &#8211; im Hauptverzeichnis des Plugins sein. 5. Lade die Übersetzungsdateien in dein Plugin. Füge den folgenden Code in die Plugin-Datei ein: function mein_plugin_load_textdomain() { load_plugin_textdomain(&#x27;mein-plugin-textdomain&#x27;, false, dirname(plugin_basename(__FILE__)) . &#x27;/languages&#x27;); } add_action(&#x27;plugins_loaded&#x27;, &#x27;mein_plugin_load_textdomain&#x27;); Stelle sicher, dass du die korrekte Textdomain (`mein-plugin-textdomain`) und den Pfad zu deinem Language-Ordner verwendest. 6. Übersetze deine Texte in den Übersetzungsdateien für die verschiedenen Sprachen. Das war&#8217;s! Mit diesen Schritten kannst du dein WordPress....</p>
<p>Der Beitrag <a rel="nofollow" href="https://homepage-nach-preis.de/2023/07/17/wordpress-plugin-multisprachig-erstellen/">WordPress Plugin multisprachig erstellen</a> erschien zuerst auf <a rel="nofollow" href="https://homepage-nach-preis.de">Homepage nach Preis - Webseite erstellen lassen</a>. Geschrieben von <a rel="nofollow" href="https://homepage-nach-preis.de/author/homepageadmin/">Homepage-nach-Preis</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Um ein WordPress Plugin multisprachig zu machen und Translationstrings (esc_html__) sowie eine Textdomain zu verwenden, kannst du den folgenden Anleitungsschritten folgen:</p>
<p>1. Definiere die Textdomain für dein Plugin. Füge den folgenden Code am Anfang deiner Plugin-Haupt-Datei hinzu:</p>
<pre>
   /**
    * Plugin Name: Mein Plugin
    * Text Domain: mein-plugin-textdomain
    */
</pre>
<p>2. Erstelle eine Übersetzungsdatei (`.pot`) für dein Plugin. Du kannst ein Übersetzungsprogramm wie Poedit oder Loco-Translate verwenden.</p>
<p>3. Füge Translationstrings (`esc_html__`) in deinen Plugin-Code ein. Hier ist ein Beispiel:</p>
<pre>
   echo esc_html__(&#x27;Willkommen auf meiner Website&#x27;, &#x27;mein-plugin-textdomain&#x27;);
</pre>
<p>   Stelle sicher, dass du bei allen Strings dieselbe Textdomain (`mein-plugin-textdomain`) verwendest.</p>
<p>4. Erstelle Übersetzungsdateien für jede Sprache, die du unterstützen möchtest. Du kannst die .pot-Datei als Vorlage verwenden und Übersetzungen für jede Sprache hinzufügen. Speichere die Übersetzungsdateien anschließend im Ordner Languages deines Plugins. Der Ordner sollte &#8211; im besten Fall &#8211; im Hauptverzeichnis des Plugins sein.</p>
<p>5. Lade die Übersetzungsdateien in dein Plugin. Füge den folgenden Code in die Plugin-Datei ein:</p>
<pre>
   function mein_plugin_load_textdomain() {
       load_plugin_textdomain(&#x27;mein-plugin-textdomain&#x27;, false, dirname(plugin_basename(__FILE__)) . &#x27;/languages&#x27;);
   }
   add_action(&#x27;plugins_loaded&#x27;, &#x27;mein_plugin_load_textdomain&#x27;);
</pre>
<p>   Stelle sicher, dass du die korrekte Textdomain (`mein-plugin-textdomain`) und den Pfad zu deinem Language-Ordner verwendest.</p>
<p>6. Übersetze deine Texte in den Übersetzungsdateien für die verschiedenen Sprachen.</p>
<p>Das war&#8217;s! Mit diesen Schritten kannst du dein WordPress Plugin multisprachig machen. Stelle aber sicher, dass du die Übersetzungen für die gewünschten Sprachen in den entsprechenden Übersetzungsdateien (.MO / .PO / .POT) bereitstellst.</p>
<p>Der Beitrag <a rel="nofollow" href="https://homepage-nach-preis.de/2023/07/17/wordpress-plugin-multisprachig-erstellen/">WordPress Plugin multisprachig erstellen</a> erschien zuerst auf <a rel="nofollow" href="https://homepage-nach-preis.de">Homepage nach Preis - Webseite erstellen lassen</a>. Geschrieben von <a rel="nofollow" href="https://homepage-nach-preis.de/author/homepageadmin/">Homepage-nach-Preis</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://homepage-nach-preis.de/2023/07/17/wordpress-plugin-multisprachig-erstellen/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Cookie &#038; SQL basiertes Authentifizierungssystem</title>
		<link>https://homepage-nach-preis.de/2023/06/26/hnp-cookie-sql-basiertes-authentifizierungssystem/</link>
					<comments>https://homepage-nach-preis.de/2023/06/26/hnp-cookie-sql-basiertes-authentifizierungssystem/#respond</comments>
		
		<dc:creator><![CDATA[Homepage-nach-Preis]]></dc:creator>
		<pubDate>Sun, 25 Jun 2023 23:01:32 +0000</pubDate>
				<category><![CDATA[Webdesign]]></category>
		<category><![CDATA[Wordpress Code]]></category>
		<category><![CDATA[multisprachig]]></category>
		<category><![CDATA[plugin]]></category>
		<category><![CDATA[translation strings]]></category>
		<category><![CDATA[webseite]]></category>
		<category><![CDATA[wordpress]]></category>
		<guid isPermaLink="false">https://homepage-nach-preis.de/?p=7846</guid>

					<description><![CDATA[<p>Unser Ansatz basiert auf einer SQL-basierten AUTH-Methode, die Cookies (Tokens) verwendet, da herkömmliche Cookies nicht server- oder domänenübergreifend funktionieren und aus Sicherheitsgründen nicht für Login- oder Session-Funktionen verwendet werden sollten. Hier ist eine Beschreibung, wie unser Ansatz funktioniert: 1. Wenn ein Benutzer auf Domain A / Server 1 einen speziellen Button betätigt, werden Cookies mit eindeutigen Token-Werten erstellt. Diese Token-Werte werden im Browser des Benutzers gespeichert und zusätzlich in einer SQL-Datenbank gespeichert. 2. Anschließend werden diese Token-Werte an Domain B / Server 2 weitergegeben. Dort werden sie erneut überprüft und verifiziert, indem die Datenbank nach dem Token-Wert durchsucht wird. 3. Wenn der Token und das Cookie korrekt sind und in der Datenbank übereinstimmen, wird auch auf Domain B ein identisches Cookie erstellt. Dadurch erfolgt eine Synchronisierung der Cookies zwischen den Domänen. Dieses synchronisierte Cookie kann dann für Sessions, den Login-Prozess oder andere cookiebasierte Funktionen auf Domain B verwendet werden. Durch diese Methode ermöglichen wir eine sichere und effektive Nutzung von Cookies für Login- und Session-Funktionen, ohne die üblichen Einschränkungen von herkömmlichen Cookies zu haben. Funktioniert auf allen System / Webseiten. Da keine systemspezifischen Tags / Hooks genutzt werden. Und wäre schnell in ein WordPress Plugin umgewandelt. Das Auth-System funktioniert aktuell....</p>
<p>Der Beitrag <a rel="nofollow" href="https://homepage-nach-preis.de/2023/06/26/hnp-cookie-sql-basiertes-authentifizierungssystem/">Cookie &#038; SQL basiertes Authentifizierungssystem</a> erschien zuerst auf <a rel="nofollow" href="https://homepage-nach-preis.de">Homepage nach Preis - Webseite erstellen lassen</a>. Geschrieben von <a rel="nofollow" href="https://homepage-nach-preis.de/author/homepageadmin/">Homepage-nach-Preis</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Unser Ansatz basiert auf einer SQL-basierten AUTH-Methode, die Cookies (Tokens) verwendet, da herkömmliche Cookies nicht server- oder domänenübergreifend funktionieren und aus Sicherheitsgründen nicht für Login- oder Session-Funktionen verwendet werden sollten. Hier ist eine Beschreibung, wie unser Ansatz funktioniert:</p>
<p>1. Wenn ein Benutzer auf Domain A / Server 1 einen speziellen Button betätigt, werden Cookies mit eindeutigen Token-Werten erstellt. Diese Token-Werte werden im Browser des Benutzers gespeichert und zusätzlich in einer SQL-Datenbank gespeichert.</p>
<p>2. Anschließend werden diese Token-Werte an Domain B / Server 2 weitergegeben. Dort werden sie erneut überprüft und verifiziert, indem die Datenbank nach dem Token-Wert durchsucht wird.</p>
<p>3. Wenn der Token und das Cookie korrekt sind und in der Datenbank übereinstimmen, wird auch auf Domain B ein identisches Cookie erstellt. Dadurch erfolgt eine Synchronisierung der Cookies zwischen den Domänen. Dieses synchronisierte Cookie kann dann für Sessions, den Login-Prozess oder andere cookiebasierte Funktionen auf Domain B verwendet werden.</p>
<p>Durch diese Methode ermöglichen wir eine sichere und effektive Nutzung von Cookies für Login- und Session-Funktionen, ohne die üblichen Einschränkungen von herkömmlichen Cookies zu haben.</p>
<p><strong>Funktioniert auf allen System / Webseiten. Da keine systemspezifischen Tags / Hooks genutzt werden. Und wäre schnell in ein WordPress Plugin umgewandelt. </strong><br />
Das Auth-System funktioniert aktuell durch die Nutzung von 2 Domains / Servern, es wäre aber möglich noch einen weiteren Server / eine weitere Domain zwischenzuschalten (AUTH-SERVER/AUTH-DOMAIN). Damit die AUTH-Funktionen ausgelagert wird, dann wäre eine mehrfache Verschlüsselungen möglich, welche eine extrem hohe Sicherheit bieten würden. </p>
<p><img width="528" height="192" decoding="async" src="https://homepage-nach-preis.de/wp-content/uploads/2023/06/Cookie-AUTH-System-1.jpg" /><br />
<img width="444" height="231" decoding="async" src="https://homepage-nach-preis.de/wp-content/uploads/2023/06/cookie-serveruebergreifend.jpg" /><br />
<img width="966" height="662" decoding="async" src="https://homepage-nach-preis.de/wp-content/uploads/2023/06/logic-A-1.jpg" /></p>
<h4>Domain / Server 1 </h4>
<pre>
&#x3C;!DOCTYPE html&#x3E;
&#x3C;!--
Name: HNP Cookie &#x26; Token Auth-System
Description: Erstellt ein Cookie-basiertes SQL Authentifizierung-System. Domain- und Server&#xFC;bergreifend.
Author: Homepage-nach-Preis
Version: 1.0
Author URI: https://homepage-nach-preis.de/
License: Creative Commons Non-Commercial - CC-NC 4.0
--&#x3E;
&#x3C;html&#x3E;
&#x3C;head&#x3E;
    &#x3C;title&#x3E;HNP Auth-System&#x3C;/title&#x3E;
&#x3C;/head&#x3E;
&#x3C;body&#x3E;
    &#x3C;h2&#x3E;HNP Cookie &#x26; Token Auth-System&#x3C;/h2&#x3E;
&#x3C;?php

// Funktion zum Generieren eines Tokens
function hnp_generate_token() {
    $token = bin2hex(random_bytes(32)); // Generiert einen zuf&#xE4;lligen Token-Wert

    // Zeige Error Logs
    ini_set(&#x27;display_errors&#x27;, 1);
    ini_set(&#x27;display_startup_errors&#x27;, 1);
    error_reporting(E_ALL);

    // &#xDC;berpr&#xFC;fen, ob das Cookie bereits gesetzt ist
    if (isset($_COOKIE[&#x27;hnp_auth_token&#x27;])) {
        $cookieToken = $_COOKIE[&#x27;hnp_auth_token&#x27;];
        echo &#x22;Das Cookie &#x27;hnp_auth_token&#x27; ist bereits gesetzt.&#x22;;
        hnp_redirectWithToken($cookieToken); // Weiterleitung zur Ziel-Domain mit dem vorhandenen Token-Parameter
        return; // Abbruch der Funktion, wenn das Cookie bereits gesetzt ist
    }

    // Speichern des Tokens in der MySQL-Datenbank auf der Auth-Domain
    $dbHost = &#x27;XXXXXXXXXXXXXX&#x27;; // Hostname der MySQL-Datenbank auf der AUTH-Domain
    $dbUser = &#x27;XXXXXXXXXXXXXX&#x27;; // Benutzername der MySQL-Datenbank
    $dbPass = &#x27;XXXXXXXXXXXXXX&#x27;; // Passwort der MySQL-Datenbank
    $dbName = &#x27;XXXXXXXXXXXXXX&#x27;; // Name der MySQL-Datenbank

    // Verbindung zur MySQL-Datenbank herstellen
    $conn = new mysqli($dbHost, $dbUser, $dbPass, $dbName);

    // &#xDC;berpr&#xFC;ft die Verbindung auf Fehler
    if ($conn-&#x3E;connect_error) {
        die(&#x27;Verbindungsfehler zur MySQL-Datenbank: &#x27; . $conn-&#x3E;connect_error); // Beendet das Skript und zeigt die Fehlermeldung an
    }

    // Tabelle erstellen, falls sie nicht existiert
    hnp_create_hnp_tokens_table($conn);

    // SQL-Befehl zum Einf&#xFC;gen des Tokens in die Datenbank
    $sql = &#x22;INSERT INTO hnp_tokens (token) VALUES (&#x27;$token&#x27;)&#x22;;

    // F&#xFC;hrt den SQL-Befehl aus
    if ($conn-&#x3E;query($sql) === TRUE) {
        // Cookie mit dem Token erstellen
        setcookie(&#x27;hnp_auth_token&#x27;, $token, [
            &#x27;expires&#x27; =&#x3E; time() + 3600,
            &#x27;path&#x27; =&#x3E; &#x27;/&#x27;,
            &#x27;domain&#x27; =&#x3E; &#x27;DOMAIN-A.COM&#x27;,
            &#x27;secure&#x27; =&#x3E; true,
            &#x27;httponly&#x27; =&#x3E; true,
            &#x27;samesite&#x27; =&#x3E; &#x27;None&#x27; // Hier wird das SameSite-Attribut auf &#x22;None&#x22; gesetzt
        ]);
        echo &#x27;Cookie mit dem Token wurde erstellt und in die Datenbank gespeichert.&#x27;;
        hnp_redirectWithToken($token); // Weiterleitung zur Ziel-Domain mit dem neuen Token-Parameter
        exit;
    } else {
        die(&#x27;Fehler beim Speichern des Tokens in der Datenbank: &#x27; . $conn-&#x3E;error); // Beendet das Skript und zeigt die Fehlermeldung an
    }

    // Schlie&#xDF;e die Verbindung zur MySQL-Datenbank
    $conn-&#x3E;close();
}

// Funktion zum Erstellen der Tabelle &#x27;hnp_tokens&#x27;
function hnp_create_hnp_tokens_table($conn) {
    $tableName = &#x27;hnp_tokens&#x27;;

    // SQL-Befehl zum Erstellen der Tabelle, falls sie nicht existiert
    $sql = &#x22;CREATE TABLE IF NOT EXISTS $tableName (
                id INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
                token VARCHAR(64) NOT NULL
            )&#x22;;

    // F&#xFC;hrt den SQL-Befehl aus
    if ($conn-&#x3E;query($sql) === TRUE) {
        echo &#x27;Die Tabelle &#x27; . $tableName . &#x27; wurde erfolgreich erstellt oder existiert bereits.&#x27;;
    } else {
        die(&#x27;Fehler beim Erstellen der Tabelle &#x27; . $tableName . &#x27;: &#x27; . $conn-&#x3E;error); // Beendet das Skript und zeigt die Fehlermeldung an
    }
}

// Funktion zur Weiterleitung zur Ziel-Domain mit dem Token-Parameter
function hnp_redirectWithToken($token)
{
    header(&#x27;Location: https://DOMAIN-B.COM/index.php?token=&#x27; . urlencode($token));
    exit;
}

// Funktion zur Weiterleitung zur Ziel-Domain mit einem ung&#xFC;ltigen Token
function hnp_redirectWithInvalidToken()
{
    // Generiere einen ung&#xFC;ltigen Token-Wert
    $invalidToken = bin2hex(random_bytes(32));

    // Leite zur Ziel-Domain mit dem ung&#xFC;ltigen Token weiter
    header(&#x27;Location: https://DOMAIN-B.COM/index.php?token=&#x27; . urlencode($invalidToken));
    exit;
}

// Funktion zum L&#xF6;schen des Cookies
function hnp_deleteCookie() {
    setcookie(&#x27;hnp_auth_token&#x27;, &#x27;&#x27;, time() - 3600, &#x27;/&#x27;, &#x27;DOMAIN-A.COM&#x27;, true, true); // L&#xF6;scht das Cookie
    echo &#x27;Cookie wurde gel&#xF6;scht.&#x27;;
    sleep(0); // Wartezeit von 0 Sekunden
    hnp_redirectWithDelay(0); // Weiterleitung zur selben Seite
}

// Funktion zur Weiterleitung zur selben Seite nach einer Verz&#xF6;gerung
function hnp_redirectWithDelay($delay) {
    $redirectUrl = $_SERVER[&#x27;REQUEST_URI&#x27;];
    header(&#x22;Refresh: $delay; url=$redirectUrl&#x22;);
    exit;
}

// &#xDC;berpr&#xFC;fen, ob der Button zum Generieren des Tokens geklickt wurde
if (isset($_POST[&#x27;generate_token&#x27;])) {
    hnp_generate_token();
}

// &#xDC;berpr&#xFC;fen, ob der Button zum L&#xF6;schen des Cookies geklickt wurde
if (isset($_POST[&#x27;delete_cookie&#x27;])) {
    hnp_deleteCookie();
}

// &#xDC;berpr&#xFC;fen, ob der Button zur Weiterleitung mit ung&#xFC;ltigem Token geklickt wurde
if (isset($_POST[&#x27;redirect_with_invalid_token&#x27;])) {
    hnp_redirectWithInvalidToken();
}
?&#x3E;

&#x3C;?php
if (isset($_COOKIE[&#x27;hnp_auth_token&#x27;])) {
    echo &#x22;Das Cookie &#x27;hnp_auth_token&#x27; wurde gesetzt oder ist bereits vorhanden.&#x22;;
} else {
    echo &#x22;Das Cookie &#x27;hnp_auth_token&#x27; wurde nicht gefunden.&#x22;;
}
?&#x3E;

&#x3C;!-- Formular mit Button zum Generieren des Tokens --&#x3E;
&#x3C;?php if (!isset($_COOKIE[&#x27;hnp_auth_token&#x27;])) { ?&#x3E;
&#x3C;h4&#x3E; Dieser Button wird nur angezeigt, falls das Cookie/ der Token noch nicht vorhanden ist: &#x3C;/h4&#x3E;
&#x3C;form method=&#x22;post&#x22;&#x3E;
    &#x3C;input type=&#x22;hidden&#x22; name=&#x22;generate_token&#x22; value=&#x22;1&#x22; /&#x3E;
    &#x3C;input type=&#x22;submit&#x22; value=&#x22;Token generieren&#x22; /&#x3E;
&#x3C;/form&#x3E;
&#x3C;?php } else { ?&#x3E;
&#x3C;h4&#x3E; Diese Button werden nur angezeigt, falls das Cookie / der Token bereits vorhanden ist: &#x3C;/h4&#x3E;
&#x3C;form method=&#x22;post&#x22;&#x3E;
    &#x3C;input type=&#x22;hidden&#x22; name=&#x22;delete_cookie&#x22; value=&#x22;1&#x22; /&#x3E;
    &#x3C;input type=&#x22;submit&#x22; value=&#x22;Cookie l&#xF6;schen&#x22; /&#x3E;
&#x3C;/form&#x3E;
&#x3C;/br&#x3E;&#x3C;form method=&#x22;post&#x22;&#x3E;
    &#x3C;input type=&#x22;hidden&#x22; name=&#x22;redirect_with_token&#x22; value=&#x22;1&#x22; /&#x3E;
    &#x3C;input type=&#x22;submit&#x22; value=&#x22;Weiter&#x22; /&#x3E;
&#x3C;/form&#x3E;
&#x3C;?php }

// &#xDC;berpr&#xFC;fen, ob der Button zur Weiterleitung mit Token geklickt wurde
if (isset($_POST[&#x27;redirect_with_token&#x27;])) {
    hnp_redirectWithToken($_COOKIE[&#x27;hnp_auth_token&#x27;]);
}
?&#x3E;
&#x3C;h4&#x3E; Ung&#xFC;ltiger Token: &#x3C;/h4&#x3E;
&#x3C;p&#x3E;Hierbei wird versucht eine Anfrage zu manipulieren, indem ein Token simuliert wird und eine korrekte Anfrage gestartet wird. Das System erkennt aber, dass der Token-Wert ung&#xFC;ltig ist, weil er nicht in der Datenbank ist&#x3C;/p&#x3E;
&#x3C;form method=&#x22;post&#x22;&#x3E;
    &#x3C;input type=&#x22;hidden&#x22; name=&#x22;redirect_with_invalid_token&#x22; value=&#x22;1&#x22; /&#x3E;
    &#x3C;input type=&#x22;submit&#x22; value=&#x22;Weiter mit ung&#xFC;ltigem Token&#x22; /&#x3E;
&#x3C;/form&#x3E;
&#x3C;/body&#x3E;
&#x3C;/html&#x3E;
</pre>
<h4>Domain / Server 2 </h4>
<p>index.php</p>
<pre>
&#x3C;!DOCTYPE html&#x3E;
&#x3C;!--
Name: HNP Cookie &#x26; Token Auth-System
Description: Erstellt ein Cookie-basiertes SQL Authentifizierung-System. Domain- und Server&#xFC;bergreifend.
Author: Homepage-nach-Preis
Version: 1.0
Author URI: https://homepage-nach-preis.de/
License: Creative Commons Non-Commercial - CC-NC 4.0
--&#x3E;
&#x3C;html&#x3E;
&#x3C;head&#x3E;
    &#x3C;title&#x3E;HNP Auth-System&#x3C;/title&#x3E;
&#x3C;/head&#x3E;
&#x3C;body&#x3E;
    &#x3C;h2&#x3E;HNP Cookie &#x26; Token Auth-System&#x3C;/h2&#x3E;
&#x9;
&#x3C;?php

function checkTokenAndSetCookie() {
    if (isset($_GET[&#x27;token&#x27;])) {
        $token = $_GET[&#x27;token&#x27;];

        // Zeige Error Logs
        ini_set(&#x27;display_errors&#x27;, 1);
        ini_set(&#x27;display_startup_errors&#x27;, 1);
        error_reporting(E_ALL);

        // &#xDC;berpr&#xFC;ft den Token in der Datenbank
        $dbHost = &#x27;XXXXXXXXXXXXXX&#x27;; // Hostname der MySQL-Datenbank auf der AUTH-Domain
        $dbUser = &#x27;XXXXXXXXXXXXXX&#x27;; // Benutzername der MySQL-Datenbank
        $dbPass = &#x27;XXXXXXXXXXXXXX&#x27;; // Passwort der MySQL-Datenbank
        $dbName = &#x27;XXXXXXXXXXXXXX&#x27;; // Name der MySQL-Datenbank

        // Verbindung zur MySQL-Datenbank herstellen
        $conn = new mysqli($dbHost, $dbUser, $dbPass, $dbName);

        // &#xDC;berpr&#xFC;ft die Verbindung auf Fehler
        if ($conn-&#x3E;connect_error) {
            die(&#x27;Verbindungsfehler zur MySQL-Datenbank: &#x27; . $conn-&#x3E;connect_error);
        }

        // &#xDC;berpr&#xFC;ft den Token in der Datenbanktabelle
        $tableName = &#x27;hnp_tokens&#x27;; // Name der Tabelle, in der die Tokens gespeichert sind
        $sql = &#x22;SELECT * FROM $tableName WHERE token = &#x27;$token&#x27;&#x22;;

        // F&#xFC;hrt die Datenbankabfrage aus
        $result = $conn-&#x3E;query($sql);

        // &#xDC;berpr&#xFC;ft das Ergebnis der Datenbankabfrage
        if ($result &#x26;&#x26; $result-&#x3E;num_rows &#x3E; 0) {
            // Token ist g&#xFC;ltig, erstellt das Cookie
            setcookie(&#x27;hnp_auth_token&#x27;, $token, [
                &#x27;expires&#x27; =&#x3E; time() + 3600,
                &#x27;path&#x27; =&#x3E; &#x27;/&#x27;,
                &#x27;domain&#x27; =&#x3E; &#x27;DOMAIN-B.COM&#x27;,
                &#x27;secure&#x27; =&#x3E; true,
                &#x27;httponly&#x27; =&#x3E; false,
                &#x27;samesite&#x27; =&#x3E; &#x27;None&#x27; // Hier wird das SameSite-Attribut auf &#x22;None&#x22; gesetzt
            ]);

            echo &#x27;Authentifizierung erfolgreich. Bitte warten Sie...&#x27;;

            // JavaScript-Weiterleitung nach 3 Sekunden
            echo &#x27;&#x3C;script&#x3E;
                    setTimeout(function() {
                        window.location.href = &#x22;index.html&#x22;;
                    }, 3000);
                  &#x3C;/script&#x3E;&#x27;;

            exit;
        } else {
            echo &#x27;Ung&#xFC;ltiger Token oder Token nicht gefunden. Authentifizierung fehlgeschlagen.&#x27;;

            // Button &#x22;Trotzdem weiter&#x22;
            echo &#x27;&#x3C;button onclick=&#x22;window.location.href = \&#x27;index.html\&#x27;;&#x22;&#x3E;Trotzdem weiter&#x3C;/button&#x3E;(Nicht vegessen, den Logout zuvor zu bet&#xE4;tigen, falls bereits eine erfolgreiche Authentifizierung stattfand)&#x27;;

            // Button &#x22;Zur&#xFC;ck&#x22;
            echo &#x27;&#x3C;button onclick=&#x22;window.history.back();&#x22;&#x3E;Zur&#xFC;ck&#x3C;/button&#x3E;&#x27;;
        }

        // Schlie&#xDF;t die Verbindung zur MySQL-Datenbank
        $conn-&#x3E;close();
    } else {
        echo &#x27;Token-Parameter fehlt.&#x27;;
    }
}

// Funktion aufrufen
checkTokenAndSetCookie();
?&#x3E;
&#x3C;/body&#x3E;
&#x3C;/html&#x3E;
</pre>
<p>index.html</p>
<pre>
&#x3C;!DOCTYPE html&#x3E;
&#x3C;!--
Name: HNP Cookie &#x26; Token Auth-System
Description: Erstellt ein Cookie-basiertes SQL Authentifizierung-System. Domain- und Server&#xFC;bergreifend.
Author: Homepage-nach-Preis
Version: 1.0
Author URI: https://homepage-nach-preis.de/
License: Creative Commons Non-Commercial - CC-NC 4.0
--&#x3E;
&#x3C;html&#x3E;
&#x3C;head&#x3E;
    &#x3C;title&#x3E;HNP Auth-System&#x3C;/title&#x3E;
&#x3C;/head&#x3E;
&#x3C;body&#x3E;
    &#x3C;h2&#x3E;HNP Cookie &#x26; Token Auth-System&#x3C;/h2&#x3E;

    &#x3C;script&#x3E;
        // Token aus dem Cookie lesen
        var token = document.cookie.replace(/(?:(?:^|.*;\s*)hnp_auth_token\s*=\s*([^;]*).*$)|^.*$/, &#x22;$1&#x22;);

        // &#xDC;berpr&#xFC;ft den Token in der Datenbank
        var xhr = new XMLHttpRequest();
        xhr.open(&#x27;GET&#x27;, &#x27;https://DOMAIN-B.COM/index.php?token=&#x27; + encodeURIComponent(token), true);
        xhr.onload = function() {
            if (xhr.status === 200 &#x26;&#x26; xhr.responseText.includes(&#x27;Authentifizierung erfolgreich&#x27;)) {
                // &#xDC;berpr&#xFC;fung erfolgreich, zeige &#x22;Erfolgreich eingeloggt&#x22; und Logout-Button
                var successMessage = document.createElement(&#x27;p&#x27;);
                successMessage.textContent = &#x27;Erfolgreich eingeloggt&#x27;;
                document.body.appendChild(successMessage);

                var logoutButton = document.createElement(&#x27;button&#x27;);
                logoutButton.textContent = &#x27;Logout&#x27;;
                logoutButton.onclick = logout;
                document.body.appendChild(logoutButton);

                document.body.appendChild(document.createElement(&#x27;br&#x27;));
                document.body.appendChild(document.createElement(&#x27;br&#x27;));

                var authDomainButton = document.createElement(&#x27;button&#x27;);
                authDomainButton.textContent = &#x27;Zur Auth-Domain&#x27;;
                authDomainButton.onclick = redirectToAuth;
                document.body.appendChild(authDomainButton);
            } else {
                // &#xDC;berpr&#xFC;fung fehlgeschlagen, zeige &#x22;Login fehlgeschlagen&#x22;
                var errorMessage = document.createElement(&#x27;p&#x27;);
                errorMessage.textContent = &#x27;Login fehlgeschlagen oder ausgeloggt.&#x27;;
                document.body.appendChild(errorMessage);

                document.body.appendChild(document.createElement(&#x27;br&#x27;));
                document.body.appendChild(document.createElement(&#x27;br&#x27;));

                var authDomainButton = document.createElement(&#x27;button&#x27;);
                authDomainButton.textContent = &#x27;Zur Auth-Domain&#x27;;
                authDomainButton.onclick = redirectToAuth;
                document.body.appendChild(authDomainButton);
            }
        };
        xhr.send();

        function logout() {
            // L&#xF6;schen des hnp_auth_token Cookies
            document.cookie = &#x27;hnp_auth_token=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/; domain=DOMAIN-B.COM; secure&#x27;;

            // Weiterleitung zur Startseite oder einer anderen Seite nach dem Logout
            window.location.href = &#x22;index.html&#x22;;
        }

        function redirectToAuth() {
            // Weiterleitung zur Auth-Domain
            window.location.href = &#x22;https://DOMAIN-A.COM/&#x22;;
        }
    &#x3C;/script&#x3E;
&#x3C;/body&#x3E;
&#x3C;/html&#x3E;

</pre>
<p><strong>Kostenloser Download:</strong><br />
[sdm_download id=&#8221;7847&#8243; fancy=&#8221;0&#8243;]</p>
<p>Es müssen lediglich die Datenbank-Verbindungsdaten und die Platzhalter für Domain-A und Domain-B ausgetauscht werden. Anschließend ist das AUTH-System bereits voll nutzbar.<br />
<strong>Zu beachten ist, weitere Sicherheitsfunktionen sollten hinzugefügt werden, wie zum Beispiel eine Verschlüsselung der Cookie/Token Daten. </strong></p>
<h4>Optional: Ansätze für Erweiterungsmöglichkeiten</h4>
<p><strong>Datenbank Daten Dauer:</strong><br />
Aktuell ist der Token / das Cookie eine Stunde im Browser des Besuchers gültig. Also eine Session von einer Stunde. In der Datenbank bleiben die Daten aber dauerhaft, damit diese aber auch nach einer Stunde gelöscht werden: </p>
<pre>
// Generiere das Ablaufdatum (1 Stunde ab dem aktuellen Zeitpunkt)
$expirationDate = date(&#x27;Y-m-d H:i:s&#x27;, strtotime(&#x27;+1 hour&#x27;));

// SQL-Befehl zum Einf&#xFC;gen des Tokens mit dem Ablaufdatum in die Datenbank
$sql = &#x22;INSERT INTO hnp_tokens (token, expiration_date) VALUES (&#x27;$token&#x27;, &#x27;$expirationDate&#x27;)&#x22;;
</pre>
<p><strong>Verschlüsselung / Entschlüsselung der Token-Daten:</strong></p>
<pre>

// Funktion zum Verschl&#xFC;sseln eines Tokens
function encryptToken($token, $encryptionKey) {
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length(&#x27;AES-256-CBC&#x27;)); // Initialisierungsvektor generieren
    $encryptedToken = openssl_encrypt($token, &#x27;AES-256-CBC&#x27;, $encryptionKey, 0, $iv); // Token verschl&#xFC;sseln
    return base64_encode($iv . $encryptedToken); // Verschl&#xFC;sselten Token codieren und zur&#xFC;ckgeben
}

// Funktion zum Entschl&#xFC;sseln eines Tokens
function decryptToken($encryptedToken, $encryptionKey) {
    $encryptedToken = base64_decode($encryptedToken); // Codierten Token decodieren
    $ivLength = openssl_cipher_iv_length(&#x27;AES-256-CBC&#x27;);
    $iv = substr($encryptedToken, 0, $ivLength); // Initialisierungsvektor extrahieren
    $encryptedToken = substr($encryptedToken, $ivLength); // Verschl&#xFC;sselten Token extrahieren
    $decryptedToken = openssl_decrypt($encryptedToken, &#x27;AES-256-CBC&#x27;, $encryptionKey, 0, $iv); // Token entschl&#xFC;sseln
    return $decryptedToken; // Entschl&#xFC;sselten Token zur&#xFC;ckgeben
}

// Beispiel zur Verwendung der Funktionen
$encryptionKey = &#x27;myEncryptionKey123&#x27;;
$token = &#x27;myToken123&#x27;;

$encryptedToken = encryptToken($token, $encryptionKey);
echo &#x27;Verschl&#xFC;sselter Token: &#x27; . $encryptedToken . &#x27;&#x3C;br&#x3E;&#x27;;

$decryptedToken = decryptToken($encryptedToken, $encryptionKey);
echo &#x27;Entschl&#xFC;sselter Token: &#x27; . $decryptedToken . &#x27;&#x3C;br&#x3E;&#x27;;
</pre>
<p><strong> $_POST anstatt $_GET nutzen</strong><br />
Der Unterschied zwischen $_POST und $_GET liegt in der Art und Weise, wie die Daten an den Server übermittelt werden.</p>
<pre>
$_POST:

    Die Daten werden über den HTTP-POST-Request an den Server gesendet.
    Die Daten sind im Body des Requests enthalten und werden nicht in der URL angezeigt.
    Geeignet für das Senden sensibler oder umfangreicher Daten, z.B. bei Formulareingaben wie Passwörtern, Texten oder hochgeladenen Dateien.
    Die Daten können im PHP-Skript über das $_POST-Array abgerufen werden.

$_GET:

    Die Daten werden über den HTTP-GET-Request an den Server gesendet.
    Die Daten werden als Teil der URL in der Adressleiste des Browsers angezeigt.
    Geeignet für das Senden von einfachen und nicht sensitiven Daten, z.B. Suchanfragen oder Parameter für Seitenaufrufe.
    Die Daten können im PHP-Skript über das $_GET-Array abgerufen werden.</pre>
<p><strong> Logik &#038; Points erweitern</strong><br />
<img width="1622" height="630" decoding="async" src="https://homepage-nach-preis.de/wp-content/uploads/2023/06/logic1.jpg" /></p>
<h4>Roadmap (kommt bald):</h4>
<p>Version 1.1</p>
<pre>
Neue Funktionen:
- OpenSSL Verschlüsselung für Token & Cookie
- Token wird auch automatisch aus der Datenbank enfternt
- CSS Styling
</pre>
<p>Version 1.2</p>
<pre>
Neue Funktionen:
- Logik erweitern auf 4 Points (also zusätzliche index.html für Entry Point)
- CSS Styling erweitern
</pre>
<p>Version 1.3</p>
<pre>
Neue Funktionen:
- Optionalen AUTH Server / AUTH Domain MID Point hinzufügen
- Weitere Verschlüsselung mit weiteren Verschlüsselungsverfahren
</pre>
<p>Version 2.0</p>
<pre>
Neue Funktionen:
- Finales Styling
- $_POST anstatt $_GET nutzen
- Weitere / zusätzliche Daten können "mitgesendet" werden (wie Usernamen, Passwörter, Alter usw)
- Zusätzliche Daten werden verschlüsselt
</pre>
<p>Der Beitrag <a rel="nofollow" href="https://homepage-nach-preis.de/2023/06/26/hnp-cookie-sql-basiertes-authentifizierungssystem/">Cookie &#038; SQL basiertes Authentifizierungssystem</a> erschien zuerst auf <a rel="nofollow" href="https://homepage-nach-preis.de">Homepage nach Preis - Webseite erstellen lassen</a>. Geschrieben von <a rel="nofollow" href="https://homepage-nach-preis.de/author/homepageadmin/">Homepage-nach-Preis</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://homepage-nach-preis.de/2023/06/26/hnp-cookie-sql-basiertes-authentifizierungssystem/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
