diff options
author | Erich Eckner <git@eckner.net> | 2023-05-16 20:22:36 +0200 |
---|---|---|
committer | Erich Eckner <git@eckner.net> | 2023-05-16 20:27:32 +0200 |
commit | 9590502b7368ad39335032114210db861ba4017d (patch) | |
tree | 4a4d451b806a74e8f5ef8c34e2961c68219d89b4 /access-restriction.php | |
parent | 712a4aa946180f1e3a4c1fe1b7e7954ffa4d89df (diff) | |
download | mocp-web-9590502b7368ad39335032114210db861ba4017d.tar.xz |
access-restriction.php new, do not commit keys
Diffstat (limited to 'access-restriction.php')
-rw-r--r-- | access-restriction.php | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/access-restriction.php b/access-restriction.php new file mode 100644 index 0000000..92049bc --- /dev/null +++ b/access-restriction.php @@ -0,0 +1,62 @@ +<?php + +$keyFile = fopen("../key.ed25519", "r"); +if ($keyFile === false) + die(); +$privKey = trim(fgets($keyFile)); +$pubKey = trim(fgets($keyFile)); +fclose($keyFile); + +function client_identifier() { + return $_SERVER['SERVER_ADDR'] . " " . $_SERVER['REMOTE_ADDR'] . " " . $_SERVER['REMOTE_PORT']; +} + +function zugriff_erlaubt() { + global $pubKey; + if (!(preg_match("/^192\.168\.[01]\.3$/", $_SERVER["REMOTE_ADDR"]) == 1)) + return true; + if (array_key_exists('key',$_GET)) { + $pubKey = hex2bin($pubKey); + return sodium_crypto_sign_open(hex2bin($_GET["key"]), $pubKey) == client_identifier(); + } + return false; +} + +function attach_key($delimiter = '&') { + if (!array_key_exists('key', $_GET)) + return; + print $delimiter . 'key=' . $_GET['key']; +} + +if (!zugriff_erlaubt()) { +?> +<html> +<head> + <script src="/encrypt_key.js"></script> + <script> + window.sodium = { + onload: function (sodium) { + var sodium = sodium; + } + }; + function update_key(form) { + privateKey = "<?php echo $privKey; ?>"; + privateKey = encrypt_private_key(form.password.value, privateKey); + privateKey = sodium.from_hex(privateKey); + let msg = sodium.crypto_sign("<?php print client_identifier(); ?>", privateKey); + form.key.value = sodium.to_hex(msg); + } + </script> + <script src="/sodium.js" async></script> +</head> +<body> +<form action="" id="form" method="get"> +Passwort: <input type="password" id="password" onchange="update_key(this.form);"> +<input type="hidden" name="key" id="key"> +<input type="submit" value="weiter""> +</form> +</body> +</html> +<?php + die(); +} |