Использование базового TOTP через мобильное приложение вместо существующей реализации второго пароля на javascript.

This commit is contained in:
2024-05-09 19:19:14 +03:00
parent 85b74015b7
commit 244e081014
7 changed files with 260 additions and 494 deletions

View File

@@ -3,6 +3,8 @@
/* @var $u User */
use Core\Config;
use Core\Db;
use Core\TOTP;
use User\Email;
use User\Password;
@@ -14,23 +16,18 @@ $password = new Password($u->info);
$email = new Email($u->info);
$status = null;
if ($_POST['oldpsw2']) { // remove psw2
if (password_verify((int)$_POST['oldpsw2'], $u->info['pass2'])) {
$u->info['pass2'] = $password->changeSecond(null)['pass2'];
$status = "<b style='color: darkolivegreen'>Второй пароль выключен.</b><br>";
} else {
$status = "<b style='color: red'>Введен не верный второй пароль!</b><br>";
}
if ($_POST['removetotp']) {
// Удаление ключа ТОТР
$u->info['totp'] = '';
Db::sql('update users set totp = ? where id = ?', [$u->info['totp'], $u->info['id']]);
$status = "<b style='color: darkolivegreen'>Секретный ключ удалён.</b><br>";
}
if ($_POST['num_count']) { //add psw2
$arr = $password->changeSecond((int)$_POST['num_count']);
$status = "<b style='color: red'>Второй пароль: {$arr['pass2']}.<br>
Запомните или запишите, т.к. он не высылается на email и его нельзя как-либо узнать.
Потеряв второй пароль, вы потеряете персонажа!<br>
Этот пароль выслан на ваш email.<br>
</b><br>";
$u->info['pass2'] = $arr['hash'];
if ($_POST['newtotp']) {
// Создание ключа ТОТР
$u->info['totp'] = TOTP::otpSecret($u->info['id']);
Db::sql('update users set totp = ? where id = ?', [$u->info['totp'], $u->info['id']]);
$status = "<b style='color: darkolivegreen'>Секретный ключ создан.</b><br>";
}
if (
@@ -66,7 +63,7 @@ if (
}
?>
<form action="main.php?security" method="post" id="security"></form>
<form action="/main.php?security" method="post" id="security"></form>
<div>
<h3>Настройки безопасности</h3>
@@ -180,41 +177,18 @@ if (
</TABLE>
</FIELDSET>
<FIELDSET>
<LEGEND><B> Второй уровень защиты </B></LEGEND>
Настоятельно рекомендуем включить второй уровень защиты.<BR>
На компьютере может быть установлен клавиатурный шпион, который записывает все нажатия клавиш, таким
образом,
могут узнать ваш пароль.<BR>
Возможно, в сети компьютеров установлен "сетевой снифер", перехватывающий все интернет пакеты, который легко
покажет все пароли. Чтобы обезопасить себя, вы можете установить своему персонажу второй пароль, который
можно
вводить при помощи мышки (клавиатурным шпионом не перехватить) и который передается на игровой сервер в
зашифрованном виде, не поддающимся расшифровке ("сетевой снифер" не сможет перехватить его).<BR>
<U>Будьте внимательны!</U> Второй пароль отправляется на email один раз,при установке второго уровня защиты!<BR>
<?php
if (!empty($u->info['pass2'])) {
echo "<BR><B>Второй пароль установлен.</B><BR><BR>
Введите второй пароль <INPUT TYPE=password NAME=oldpsw2 size=10 maxlength=8>
<INPUT form='security' TYPE=submit name=changepsw value=\"Выключить второй пароль\" onclick=\"return confirm('Выключить запрос второго пароля при входе в Бойцовский Клуб?')\">";
} else {
?>
Длина пароля:<BR>
<label>
<INPUT form="security" TYPE=radio NAME="num_count" value=4> 4 знака<BR>
</label>
<label>
<INPUT form="security" TYPE=radio NAME="num_count" checked value=6> 6 знаков<BR>
</label>
<label>
<INPUT form="security" TYPE=radio NAME="num_count" value=8> 8 знаков<BR>
</label>
<INPUT form="security" TYPE=submit name=changepsw value="Установить второй пароль"
onclick="return confirm('Система сама придумает вам второй пароль, он будет показан на этой странице, после того, как вы нажмете OK и продублирован на email, указанный при регистрации. Будьте внимательны.\nУстановить второй пароль?')">
<BR>
<?php
}
?>
<LEGEND><B> TOTP </B></LEGEND>
TOTP (Time-based One-Time Password) - это метод двухфакторной аутентификации, который генерирует одноразовый пароль на основе текущего времени.
Устанавливается для повышения безопасности вашего аккаунта, так как помогает защитить его от несанкционированного доступа.<br>
Вы можете использовать TOTP приложения, такие как Google Authenticator или Authy, чтобы генерировать и отображать временные одноразовые пароли на вашем мобильном устройстве.
<br><br>
<U>Будьте внимательны!</U> Секретный ключ генерируется только один раз и не подлежит восстановлению. Его можно только удалить или заменить новым.<br>
<?php if (!empty($u->info['totp'])): ?>
<br><b>Секретный ключ:</b>
<pre>{$u->info['totp']}</pre><br><br>
<input form='security' type='submit' name='removetotp' value='Удалить секретный ключ' disabled><br>
<?php endif; ?>
<input form='security' type='submit' name='newtotp' value='Создать новый секретный ключ' disabled><br>
</FIELDSET>
</div>
</div>