blob: 92049bc52cc3e0651adf801ebec6da4bd2891c43 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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();
}
|