cookie_access/index.php - Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen


<?php
/*
 * cookie_access - index.php
 * Urheber Ralph Hahn, Seif-Wald-Ring 26, 54329 Konz-Roscheid
 * Alle Rechte vorbehalten!
 *
 * Sie können diese Datei unter den Bedingungen der GNU General Public License frei verwenden und weiter verbreiten.
 * Der Urheber-Hinweis ist erforderlich.
 *
 * Sie können Änderungen vornehmen oder individuell anpassen.
 * Achtung: Fehlerhafte Angaben können Probleme verursachen!
 * Testen Sie einzelne Änderungen immer gleich bevor weitere vorgenommen werden.
 *
*/ 

/* Hier ggf. eigene writelog.inc.php includen */
include "writelog.inc.php";
include "func.inc.php";

?>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>COOKIE_ACCESS</title>
<link rel="icon" href="../favicon.ico" type="image/x-icon" />
<link rel="apple-touch-icon" href="../apple-touch-icon.png" />
<style>
html {
    height: 100%;
    overflow: scroll;  
}

body {
    background-color: #FFE6B3;
}

div#outer {
    display: table;
    height: 100%;
    width: 100%;
}

div#container {
     display: table-cell;
    text-align: center;
    vertical-align: middle;
     word-break: break-all;
}

</style>
</head>
<body>
<div id="outer">
<div id="container">
<img src="cookie_access.png" width="100%"/></a><br /><br />

<?php

/*
 * hier übergeben wir zum Beispiel den Cookienamen, DYNDNS-USER, Remote-Addr, Datum und verschlüsseln mit KEY-LINK
 * Sie können hier alles übergeben was Sie für eine Abfrage benötigen 
*/

$wert="cookie_access|access-cookie|".$_SERVER['REMOTE_ADDR']."|".date("d.m.Y");
$link=my_encrypt($wert, $key_link);

echo '<h1>Webseite, Scripte absichern mit COOKIE-ACCESS</h1><br><br>';
echo '<h2>Erzeugt wurde der Wert: '.$wert.'</h2><br>';
echo 'Dieser wurde verschlüsselt zu:<br>'.$link;
echo '<br><br>';
echo '<a href="https://'.$_SERVER["SERVER_NAME"].'/cookie_access/set_cookie.php?id='.$link.'" /><h1>Klicke jetzt hier um den Cookie zu setzen!!</h1></a>';
echo '<br><br>Der Link könnte zum Setzen des Cookies auch per E-Mail oder SMS/Nachrichten verschickt werden:<br><br>https://ihredomain.tld/cookie_access/set_cookie.php/?id='.$link.'';
echo '<br><br><a href="https://event-kalender.checkip.net/show/showcookieaccess.php" /><h2>Zeige Scripte</h2></a><br><br>';
echo '<img src="Access-Cookie.jpg"/>';

?>

<br><br>
<a href="https://checkip.net/getmyowndyndns/" target="_blank" title="checkip at net"><img src="../../ev-header.png" width="50%"/></a><br /><br />
</div>
</div>
</body></html>


cookie_access/set_cookie.php - Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen


<?php
/*
 * cookie_access - set_cookie.php
 * Urheber Ralph Hahn, Seif-Wald-Ring 26, 54329 Konz-Roscheid
 * Alle Rechte vorbehalten!
 *
 * Sie können diese Datei unter den Bedingungen der GNU General Public License frei verwenden und weiter verbreiten.
 * Der Urheber-Hinweis ist erforderlich.
 *
 * Sie können Änderungen vornehmen oder individuell anpassen.
 * Achtung: Fehlerhafte Angaben können Probleme verursachen!
 * Testen Sie einzelne Änderungen immer gleich bevor weitere vorgenommen werden.
 *
*/ 

/* Hier ggf. eigene writelog.inc.php includen */
include "writelog.inc.php";
include "func.inc.php";

?>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>COOKIE_ACCESS - SETCOOKIE</title>
<link rel="icon" href="../favicon.ico" type="image/x-icon" />
<link rel="apple-touch-icon" href="../apple-touch-icon.png" />
<style>
html {
    height: 100%;
    overflow: scroll;  
}

body {
    background-color: #FFE6B3;
}

div#outer {
    display: table;
    height: 100%;
    width: 100%;
}

div#container {
     display: table-cell;
    text-align: center;
    vertical-align: middle;
}

</style>
</head>
<body>
<div id="outer">
<div id="container">
<img src="cookie_access.png" width="100%"/></a><br /><br />

<?php

/* $_REQUEST["id"] decryten */
$linkcheck = my_decrypt($_REQUEST["id"], $key_link);

/* prüfen, ob der übergebene Link gültig ist */
if ($linkcheck !== "") {

     /* Zum Beispiel prüfen ob access-cookie enthalten ist.
      * Oder Werte aus einm Array vergleichen,
      * oder Werte aus einer Datenbank vergleichen
      * do what you can and what you want
     */
     if (strpos($linkcheck, "access-cookie") > 0) {

          /* cookiename aus linkcheck nehmen */
          list($cookiename, $dyndns, $remoteaddr, $gesetzt) = explode("|", $linkcheck);
     
     
          /* Ablauf in einem Jahr plus 1 Tag um 12 Uhr */
          $expire = strtotime(date("Y-m-d", (time()+(3600*24*366)))." 12:00:00");
          $path = "/";
          $domain = "checkip.net";
          $samesite = "Strict";
          $secure = true;
          $httponly = true;

          /* wir fügen $expire hinzu und verschlüsseln mit KEY-COOKIE */
          $pass=my_encrypt($linkcheck."|".date("d-m-Y H:i:s", $expire), $key_cookie);

          setcookie($cookiename,$pass, [ 
          'expires' => $expire,
          'path' => $path,
          'secure' => $secure,
          'httponly' => $httponly,
          ]);

          /* Dieser Link soll nur heute gültig sein und der $cookiename soll abgefragt werden */
          $link=my_encrypt(date("Ymd").'|'.$cookiename, $key_link);

          echo "<h1>Cookie wurde gesetzt!</h1>";
          echo "<h1>Prüfe jetzt bitte den Zugriff mit<br><br>";
          echo '<a href="https://'.$_SERVER["SERVER_NAME"].'/cookie_access/cookie_access_check/?id='.$link.'" />hier klicken!!</a>';
          echo "</h1>";
     } else {
     echo '<img src="https://'.$_SERVER["SERVER_NAME"].'/cookie_access/cookie_access_check/cookiecheckfalse.png" />';
     }
} else {
     echo '<img src="https://'.$_SERVER["SERVER_NAME"].'/cookie_access/cookie_access_check/cookiecheckfalse.png" />';
}
?>

<br><br>
<a href="https://checkip.net/getmyowndyndns/" target="_blank" title="checkip at net"><img src="../../ev-header.png" width="50%"/></a><br /><br />
</div>
</div>
</body></html>


cookie_access/func.inc.php – Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen


<?php
/*
 * cookie_access - func.inc.php
 * Urheber Ralph Hahn, Seif-Wald-Ring 26, 54329 Konz-Roscheid
 * Alle Rechte vorbehalten!
 *
 * Sie können diese Datei unter den Bedingungen der GNU General Public License frei verwenden und weiter verbreiten.
 * Der Urheber-Hinweis ist erforderlich.
 *
 * Sie können Änderungen vornehmen oder individuell anpassen.
 * Achtung: Fehlerhafte Angaben können Probleme verursachen!
 * Testen Sie einzelne Änderungen immer gleich bevor weitere vorgenommen werden.
 *
*/ 

/* key mit 16 Char */
$key_link  ="😀😀😀😀 setz Dir Deinen Key 😀😀😀😀 Zum Beispiel: W2pNcvzD/CeXrUy=";
$key_cookie="😀😀😀😀 setz Dir Deinen Key 😀😀😀😀 Zum Beispiel: pNcvz/UmR0cNCeX=";

/* 
 * Folgende Zuweisung erspart eine Abfrage im linkwert / cookiewert
 *
 * key_link nur heute gültig: $key_link = date("Ymd").$key_link;
 * key_cookie nur dieses Jahr gülig: $key_cookie = date("Y").$key_cookie;
 *
 * Wir kümmern uns nicht um die Länge von key_*, weil openssl_encrypt/_decrypt entweder kürzt oder ergänzt mit nul auf 16 Stellen
 *
*/

function my_encrypt($string, $key) {
     $method="aes-128-cbc";
     $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($method));
     $pass2 = openssl_encrypt($string, $method, $key, 0, $iv);
     $pass=base64_encode($pass2 . '::' . $iv);
     return rtrim( strtr( $pass, '+/', '-_'), '=');
}

function my_decrypt($string, $key) {
     $pass2=strtr( $string, '-_', '+/') . str_repeat('=', 3 - ( 3 + strlen( $string )) % 4 );
     $pass=base64_decode($pass2);
     if (strpos($pass, "::") === false) { return "";}
     list($pass2, $iv) = explode('::', $pass);
     if (strlen($iv) <> 16) { return "";}
     $method="aes-128-cbc";
     return openssl_decrypt($pass2, $method, $key, 0, $iv);
}

?>


cookie_access/generate_cookie.php - Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen


<?php
/*
 * cookie_access - generate_cookie.php BEISPIEL
 * Urheber Ralph Hahn, Seif-Wald-Ring 26, 54329 Konz-Roscheid
 * Alle Rechte vorbehalten!
 *
 * Sie können diese Datei unter den Bedingungen der GNU General Public License frei verwenden und weiter verbreiten.
 * Der Urheber-Hinweis ist erforderlich.
 *
 * Sie können Änderungen vornehmen oder individuell anpassen.
 * Achtung: Fehlerhafte Angaben können Probleme verursachen!
 * Testen Sie einzelne Änderungen immer gleich bevor weitere vorgenommen werden.
 *
*/ 

include("func.inc.php");

$names = [
"MUELLER",
"HAHN",
"BERNER",
"CHECKIP",
];

$i = substr(rand(), 2, 4);

foreach($names as $name) {
     $code=$i.'-'.$name.'-'.substr(rand(), 2, 4).'-'.substr(rand(), 1, 4);
     $encrypt = my_encrypt($code, $key_cookie); 
     echo 'Code: '.$code.' - encrypt: '.$encrypt."<br>";
}
?>


cookie_access/cookie_access_check/index.php - Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen


<?php
/*
 * cookie_access/cookie_access_check - index.php
 * Urheber Ralph Hahn, Seif-Wald-Ring 26, 54329 Konz-Roscheid
 * Alle Rechte vorbehalten!
 *
 * Sie können diese Datei unter den Bedingungen der GNU General Public License frei verwenden und weiter verbreiten.
 * Der Urheber-Hinweis ist erforderlich.
 *
 * Sie können Änderungen vornehmen oder individuell anpassen.
 * Achtung: Fehlerhafte Angaben können Probleme verursachen!
 * Testen Sie einzelne Änderungen immer gleich bevor weitere vorgenommen werden.
 *
*/ 

/* Hier ggf. eigene writelog.inc.php includen */
include "../writelog.inc.php";
include "../func.inc.php";

?>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>COOKIE_ACCESS_CHECK</title>
<link rel="icon" href="../../favicon.ico" type="image/x-icon" />
<link rel="apple-touch-icon" href="../../apple-touch-icon.png" />
<style>
html {
    height: 100%;
    overflow: scroll;  
}

body {
    background-color: #FFE6B3;
}

div#outer {
    display: table;
    height: 100%;
    width: 100%;
}

div#container {
     display: table-cell;
    text-align: center;
    vertical-align: middle;
}

</style>
</head>
<body>
<div id="outer">
<div id="container">
<img src="../cookie_access.png" width="100%"/></a><br /><br />

<?php
if (isset($_REQUEST["id"])) {
     $linkcheck = my_decrypt($_REQUEST["id"], $key_link);
     if ($linkcheck == "") { echo '<img src="cookiecheckfalse.png" /><br></div></div></body></html>'; exit; }

     /* gueltig und cookiename aus linkcheck nehmen */
     list($gueltig, $cookiename) = explode("|", $linkcheck);

     if ($gueltig !== date("Ymd")) { echo '<img src="cookiecheckfalse.png" /><br></div></div></body></html>'; exit; }

     if (isset($_COOKIE[$cookiename])) {
          $cookiewert = my_decrypt($_COOKIE["cookie_access"], $key_cookie);
     } else {
          echo '<img src="cookiecheckfalse.png" /><br></div></div></body></html>'; exit;
     }

     list($cookiename, $dyndns, $remoteaddr, $gesetzt, $gueltigbis) = explode("|", $cookiewert);
     echo '<img src="cookiecheck.png" width="30%" /><br><br>Cookie-Wert: '.$cookiewert.'<br><br>';
     echo 'COOKIENAME: '.$cookiename.'<br>';
     echo 'DYNDNS USER: '.$dyndns.'<br>';
     echo 'IHRE IP: '.$remoteaddr.'<br>';
     echo 'COOKIE gesetzt am: '.$gesetzt.'<br>';
     echo 'COOKIE gültig bis: '.$gueltigbis.'<br>';

     /* Abfrage-Beispiele */
     if($remoteaddr !== $_SERVER['REMOTE_ADDR']) { echo "<br> Die im Cookie gespeicherte IP-Adresse ist nicht mit der SERVER['REMOTE_ADDR'] identisch!!<br>"; } else { echo "<br> Die im Cookie gespeicherte IP-Adresse ist mit der SERVER['REMOTE_ADDR'] identisch!!<br>"; }
     if($dyndns == "access-cookie") { echo '<br> Dieser Cookie ist für RaHa ;-)<br>'; }

} else {
     echo '<img src="cookiecheckfalse.png" />';
     $dyndns = "test";     
}

/*
 * Zusätzlicher Sicherheits-Check via DYNDNS
 *
 * Abfragen der IP-ADDR von DYNDNS access-cookie.dyndns.checkip.net ab
 *
 * Du kannst Deine eigene kostenlose DYNDNS hier bestellen: https://checkip.net/getmyowndyndns/
 *
 * Vor der Abfrage muss die DYNDNS upgedatet werden!!
 *
 * Eintrag in FritzBox unter Freigaben DYNDNS
 *  
 * Update mit Browser
 * Aufruf: https://dyndns.checkip.net/updatedns.php?username=access-cookie&password=bekannt&IP4=89.58.47.50&IP6=2a03:4000:67:f62::1
 *
*/
$dyndns_addr=gethostbyname($dyndns.'.dyndns.checkip.net');
echo '<br>Die IP-ADDR der DYNDNS '.$dyndns.'.dyndns.checkip.net ist: '.$dyndns_addr;

/* wenn die DYNDNS nicht REMOTE-ADDR ist, dann was auch immer ...
if ($dyndns_addr !== $_SERVER['REMOTE_ADDR']) { echo 'Du hast keinen Zugang zum Script';}

if ($dyndns_addr == $_SERVER['REMOTE_ADDR']) { echo 'Hurra, Du hast Zugang zum Script';}
*/

/* Prüfen $dyndns_addr bei checkip.net*/
echo '<br><a href="https://checkip.net/?iplocation&IP='.$dyndns_addr.'" target="_blank" /><h4>'.$dyndns_addr.'</h4></a>';
echo '<a href="https://checkip.net/?iplocation&NAME='.$dyndns.'.dyndns.checkip.net" target="_blank" /><h4>'.$dyndns.'.dyndns.checkip.net</h4></a>';
?>

<br><br>
<a href="https://checkip.net/getmyowndyndns/" target="_blank" title="checkip at net"><img src="../../ev-header.png" width="50%"/></a><br /><br />
</div>
</div>
</body></html>



cookie_access/cookie_access_webspace_check/.htaccess (APACHE) – Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen


RewriteEngine On
RewriteCond %{HTTP_COOKIE} !^.*cookie_access.*$
RewriteRule . nocookie_htaccess.php [L]


cookie_access/cookie_access_webspace_check/nginx.txt (NGINX) – Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen


#nginx
server {
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name ...

     ...

    error_page 404 /static/404.html;

     location /access_only_with_cookie/ {
          if ($cookie_cookie_access = false) { 
          return 307 https://event-kalender.checkip.net/cookie_access/cookie_access_webspace_check/nocookie_nginx.php; 
              } 
     }

     ...
}


Teste hier ohne gesetzten Cookie: https://event-kalender.checkip.net/cookie_access/access_only_with_cookie/
es erfolgt eine Umleitung direkt zu https://event-kalender.checkip.net/cookie_access/cookie_access_webspace_check/nocookie_nginx.php


cookie_access/cookie_access_webspace_check/index.php - Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen


<?php
/*
 * cookie_access/cookie_access_webspace_check - index.php
 * Urheber Ralph Hahn, Seif-Wald-Ring 26, 54329 Konz-Roscheid
 * Alle Rechte vorbehalten!
 *
 * Sie können diese Datei unter den Bedingungen der GNU General Public License frei verwenden und weiter verbreiten.
 * Der Urheber-Hinweis ist erforderlich.
 *
 * Sie können Änderungen vornehmen oder individuell anpassen.
 * Achtung: Fehlerhafte Angaben können Probleme verursachen!
 * Testen Sie einzelne Änderungen immer gleich bevor weitere vorgenommen werden.
 *
*/ 

/* Hier ggf. eigene writelog.inc.php includen */
include "../writelog.inc.php";
include "../func.inc.php";

/* Ist der Cookie vorhanden? */
if (isset($_COOKIE['cookie_access'])) {
     /* Abfrage-Beipsiele
      *
      * Zum Beispiel prüfen ob access-cookie enthalten ist.
      * Oder Werte aus einm Array vergleichen,
      * oder Werte aus einer Datenbank vergleichen
      *
      * do what you can and what you want
      *
     */
     $cookiewert = my_decrypt($_COOKIE["cookie_access"], $key_cookie);
     if ($cookiewert == "") { header("Location:nocookie.php"); }
     list($cookiename, $dyndns, $remoteaddr, $gesetzt, $gueltigbis) = explode("|", $cookiewert);
     if ($cookiename !== "cookie_access") { header("Location:nocookie.php"); }
     if ($dyndns !== "access-cookie") { header("Location:nocookie.php"); }

     /* IP-Vergleich mit DYNDNS, ist hier ausgeschaltet weil die IP der des Servers checkip.net entspricht
     $dyndns_addr=gethostbyname($dyndns.'.dyndns.checkip.net');
     if ($dyndns_addr !== $_SERVER['REMOTE_ADDR']) { header("Location:nocookie.php"); }
     */

} else {
      header("Location:nocookie.php");
}

?>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>COOKIE_ACCESS_CHECK</title>
<link rel="icon" href="../../favicon.ico" type="image/x-icon" />
<link rel="apple-touch-icon" href="../../apple-touch-icon.png" />
<style>
html {
    height: 100%;
    overflow: scroll;  
}

body {
    background-color: #FFE6B3;
}

div#outer {
    display: table;
    height: 100%;
    width: 100%;
}

div#container {
     display: table-cell;
    text-align: center;
    vertical-align: middle;
}

</style>
</head>
<body>
<div id="outer">
<div id="container">
<img src="../cookie_access.png" width="100%"/></a><br /><br />
<br><br>
<img src="../cookie_access_check/cookiecheck.png" />
<br><br>
<a href="https://checkip.net/getmyowndyndns/" target="_blank" title="checkip at net"><img src="../../ev-header.png" width="50%"/></a><br /><br />
</div>
</div>
</body></html>


cookie_access/cookie_access_webspace_check/nocookie.php - Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen


<?php
/*
 * cookie_access/cookie_access_webspace_check - nocookie.php
 * Urheber Ralph Hahn, Seif-Wald-Ring 26, 54329 Konz-Roscheid
 * Alle Rechte vorbehalten!
 *
 * Sie können diese Datei unter den Bedingungen der GNU General Public License frei verwenden und weiter verbreiten.
 * Der Urheber-Hinweis ist erforderlich.
 *
 * Sie können Änderungen vornehmen oder individuell anpassen.
 * Achtung: Fehlerhafte Angaben können Probleme verursachen!
 * Testen Sie einzelne Änderungen immer gleich bevor weitere vorgenommen werden.
 *
*/ 

/* Hier ggf. eigene writelog.inc.php includen */
include "../writelog.inc.php";
?>

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<title>COOKIE_ACCESS_CHECK</title>
<link rel="icon" href="../../favicon.ico" type="image/x-icon" />
<link rel="apple-touch-icon" href="../../apple-touch-icon.png" />
<style>
html {
    height: 100%;
    overflow: scroll;  
}

body {
    background-color: #FFE6B3;
}

div#outer {
    display: table;
    height: 100%;
    width: 100%;
}

div#container {
     display: table-cell;
    text-align: center;
    vertical-align: middle;
}

</style>
</head>
<body>
<div id="outer">
<div id="container">
<img src="../cookie_access.png" width="100%"/></a><br /><br />
<br><br>
<img src="../cookie_access_check/cookiecheckfalse.png" />
<br><br>
<a href="https://checkip.net/getmyowndyndns/" target="_blank" title="checkip at net"><img src="../../ev-header.png" width="50%"/></a><br /><br />
</div>
</div>
</body></html>