Im Format UTF-8 speichern! Ggf. im Browser - Darstellung Textcodierung auf Unicode (UTF-8) stellen
<?php
/*
Erweiterung zum Gebrauch im Event-Kalender - generateaccesslink.php (utf-8)
© RaHa
Dieses Script wird verteilt ohne irgendeine Garantie und Gewährleistung oder Eignung für einen
bestimmten Zweck. Weitere Informationen finden Sie in der GNU General Public License.
Siehe Datei: license.txt - http://www.gnu.org/licenses/gpl.html
Diese Datei ist urheberrechtlich geschützt (c) 2020 ralph-hahn.net alle Rechte vorbehalten.
Sie können diese Datei unter den Bedingungen der GNU General Public License frei verwenden und weiter
verbreiten.
Folgende Ordner sind erforderlich:
accesslink
accesslink/registration
accesslink/verified
im Ordner accessliknk eine .htaccess mit folgendem Inhalt anlegen:
<Files "*.*">
Deny from all
</Files>
*/
// entsprechend anpassen
$domain="event-kalender.checkip.net";
// Pruefung ob Aufruf von zulaessiger IP/DYNDNS erfolgt
// ggf. die Zeilen auskommentieren!
if (!isset($argv[0])) {
$dynsallow['1']="remote-xxx.dyndns.checkip.net";
$dynsallow['2']="mobile-xxx.dyndns.checkip.net";
$i = 0;
$doaction=false;
foreach ($dynsallow as $dynallow) {
$i++;
$ipremote=$_SERVER["REMOTE_ADDR"];
$hostip=gethostbyname($dynallow);
if ($ipremote==$hostip) { $doaction=true; break; }
}
if ($doaction === false) { echo "NO"; exit; }
}
function myencrypt($string) {
$key="KA76LrumR0cNfdyjXW2pMcvzSIwx/suCcMdCDUGlDEk=";
$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 accesss_str() {
$requesttime=strval($_SERVER["REQUEST_TIME_FLOAT"]);
$requesttime_pos=strpos($requesttime, ".")+1;
$requesttime_mircotime=substr("0000".substr($requesttime,$requesttime_pos), -4);
$requesttime_time=substr($requesttime,0,$requesttime_pos-1);
return "ACCESSLINK-CHECKIP-".$requesttime_time.$requesttime_mircotime.bin2hex(random_bytes(7));
}
if (isset($_REQUEST['name'])) {
$benutzername=$_REQUEST['name'];
if ($benutzername=="") { echo "<h1>Bitte Benutzername/Kürzel/Code in der URL angeben! (?name=)</h1>", exit; }
} else { echo "<h1>Bitte Benutzername/Kürzel/Code in der URL angeben! (?name=)</h1>", exit; }
// Sind die erforderlichen Ordner vorhanden, wenn nicht anlegen
if (!file_exists('accesslink/registration/')) { echo "Der Ordner accesslink/registration/ existiert nicht, bitte anlegen"; exit;}
if (!file_exists('accesslink/verified/')) { echo "Der Ordner accesslink/verified/ existiert nicht, bitte anlegen"; exit;}
// Einen Link erzeugen
//
$dateiname=accesss_str();
$accesspass=myencrypt($benutzername."|".$dateiname);
$accesslink='<a href="https://'.$domain.'/?access='.$accesspass.'">LINK</a>';
echo $dateiname." für interne Zwecke!<br><br>";
echo $accesslink." dem Benutzer übergeben!";
// für chekip.net direkt nach verified, sonst erst mal in registration
$filepass="accesslink/verified/".$dateiname;
if (($IntFileOpenHandle = fopen($filepass, "a")) !== FALSE) {
$StrOutput=$benutzername."\n".$accesslink."\n";
fputs($IntFileOpenHandle, $StrOutput);
fclose($IntFileOpenHandle);
}
/*
$filepass="accesslink/registration/".$dateiname;
if (($IntFileOpenHandle = fopen($filepass, "a")) !== FALSE) {
$StrOutput=$benutzername."\n".$accesslink."\n";
fputs($IntFileOpenHandle, $StrOutput);
fclose($IntFileOpenHandle);
}
*/
// $accespass legen wir als Datei mit $dateiname im Ordner ./accesslink/registration ab
// Das erfolgt zum Beispiel mit einem Abfragescript, dort kann man sich registieren, die Daten werden
// gespeichert und ein Link per E-Mail zur Bestätigung versandt.
//
// Mit der Bestätigung wird die Datei nach ./accesslink/verified verschoben
//
// In der Datei $accesspass stehen zum Beispiel die Daten der Registrierung
// Beispiel erzeugter Accesslink:
// https://event-kalender.checkip.net/?access=WFI3WGFWRW9UL1U4TC8vTFJjR3VWSzN0c0NueTMxeGl1T1lJMkZNaTR0MnRhTTNPaWhyelJWbHcwMXQ5OUp4Uzo6WWa0P64v-xJJ3F_GJEKpzg
//
//Benutzer: ACESSLINK
//Dateiname: ACCESSLINK15843755756626
// diesen benutzen wir zum Zugriff auf den Event-Kalender
exit;
// Nachfolgendes kommt in verbindung.php hinter Verbindung zur Datenbank
function mydecrypt($string) {
$pass2=strtr( $string, '-_', '+/') . str_repeat('=', 3 - ( 3 + strlen( $string )) % 4 );
list($pass, $iv) = explode('::', base64_decode($pass2), 2);
$key="KA76LrumR0cNfdyjXW2pMcvzSIwx/suCcMdCDUGlDEk=";
$method="aes-128-cbc";
return openssl_decrypt($pass, $method, $key, 0, $iv);
}
if (isset($_SERVER['HTTP_REFERER'])) {
$accesslink=trim($_SERVER['HTTP_REFERER']);
$pos=strpos($accesslink, "access=");
if ($pos!==false) {
$accesslink=substr($accesslink, $pos+7, strlen($accesslink)-$pos+7);
$accesslink=mydecrypt($accesslink);
$pos=strpos($accesslink, "|");
$benutzername=substr($accesslink, 0, $pos);
$dateiname=substr($accesslink, $pos+1, strlen($accesslink)-$pos+1);
$filepass="accesslink/verified/".$dateiname;
if (!is_file($filepass)){
echo 'Sie sind nicht berechtigt!';
exit;
}
unset($_SESSION["name"]);
$_SESSION["name"] = $benutzername;
$NAME = $_SESSION["name"]; // wenn der Admin sein soll
}
}
?>