200 lines
9.4 KiB
PHP
200 lines
9.4 KiB
PHP
<?php
|
||
|
||
/* @var $u User */
|
||
|
||
use Core\Config;
|
||
use Core\Db;
|
||
use Core\TOTP;
|
||
use User\Email;
|
||
use User\Password;
|
||
|
||
if (!defined('GAME')) {
|
||
die();
|
||
}
|
||
|
||
$password = new Password($u->info);
|
||
$email = new Email($u->info);
|
||
$status = null;
|
||
|
||
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['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 (
|
||
(
|
||
$_POST['oldpass'] && $_POST['npass'] && $_POST['npass2'] ||
|
||
$_POST['oldpsw'] && $_POST['oldemail'] && $_POST['newemail']
|
||
) &&
|
||
$u->info['securetime'] > time()
|
||
) {
|
||
$status = "<span style='color: red'>Должно пройти не менее трех суток между сменой подтверждения, пароля или email.</span><br>";
|
||
} else {
|
||
if ($_POST['oldpass'] && $_POST['npass'] && $_POST['npass2']) { /*-------Смена пароля--------*/
|
||
if (!password_verify($_POST['oldpass'], $u->info['pass'])) {
|
||
$status = "<span style='color: red;'>Неверный старый пароль.</span><br>";
|
||
} elseif ($_POST['npass'] !== $_POST['npass2']) {
|
||
$status = "<span style='color: red;'>Не совпадают новые пароли.</span><br>";
|
||
} else {
|
||
$u->info['pass'] = $password->changeFirst($_POST['oldpass'], $_POST['npass']);
|
||
$status = "<span style='color: darkolivegreen;'>Пароль удачно сменен.</span><br>";
|
||
}
|
||
}
|
||
|
||
if ($_POST['oldpsw'] && $_POST['oldemail'] && $_POST['newemail']) { /*-----Смена e-mail------*/
|
||
if (password_verify($_POST['oldpsw'], $u->info['pass'])) {
|
||
$status = "<span style='color: red'>Неверный пароль.</span><br>";
|
||
} elseif ($u->info['mail'] !== $_POST['oldemail']) {
|
||
$status = "<span style='color: red'>Неверный старый E-Mail.</span><br>";
|
||
} else {
|
||
$u->info['mail'] = $email->change($_POST['oldemail'], $_POST['newemail']);
|
||
$status = "<span style='color: darkolivegreen;'>Email удачно сменен.</span><br>";
|
||
}
|
||
}
|
||
}
|
||
?>
|
||
|
||
<form action="/main.php?security" method="post" id="security"></form>
|
||
|
||
<div>
|
||
<h3>Настройки безопасности</h3>
|
||
<div style="text-align: right">
|
||
<input type="button" value="Вернуться" onClick="location.href='main.php';">
|
||
</div>
|
||
<div><?= $status ?></div>
|
||
<div>
|
||
Чем выше уровень вашего персонажа, тем больше к нему внимания со стороны злоумышленников.
|
||
Чтобы ваш персонаж небыл подвержен взлому, необходимо соблюдать элементарные меры предосторожности.
|
||
<br> А именно:
|
||
<ol>
|
||
<li>
|
||
Никогда, ни под каким предлогом, никому не говорите свой пароль.
|
||
Ни паладинам, ни администрации не нужно знать ваш пароль.
|
||
</li>
|
||
<li>
|
||
Вводите логин и пароль только на титульной странице
|
||
<a href="<?= Config::get('https') ?>" target="_blank"><?= Config::get('https') ?></a>
|
||
Ни на каких других сайтах, которые будут как две капли похожие на наш,
|
||
и куда вас зазывают обещая на халяву предметы или еврокредиты, не вводите свой пароль!
|
||
Иначе Ваш персонаж с вероятностью 95% будет взломан.
|
||
</li>
|
||
</ol>
|
||
Настоятельно рекомендуем прочесть заметку
|
||
<a href="<?= Config::get('https') ?>/forum/?r=48&rnd=1" target=_blank>Как обезопасить своего персонажа?</a>.
|
||
<br><br>
|
||
Если вы играете из интернет кафе или компьютерного клуба, где шанс быть взломанным очень высокий,
|
||
рекомендуем включить второй уровень защиты (см. ниже)
|
||
<br><br>
|
||
<fieldset>
|
||
<legend><b>Смена пароля</b></legend>
|
||
<table>
|
||
<tr>
|
||
<td style="text-align: right">
|
||
Старый пароль:
|
||
</td>
|
||
<td>
|
||
<label>
|
||
<input form="security" type=password name="oldpass">
|
||
</label>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="text-align: right">
|
||
Новый пароль:
|
||
</td>
|
||
<td>
|
||
<label>
|
||
<input form="security" type=password name="npass">
|
||
</label>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td style="text-align: right">
|
||
Новый пароль (еще раз):
|
||
</td>
|
||
<td>
|
||
<label>
|
||
<input form="security" type=password name="npass2">
|
||
</label>
|
||
</td>
|
||
</tr>
|
||
<tr>
|
||
<td colspan="2" style="text-align: right">
|
||
<input form="security" type=submit value="Сменить пароль" name="changepsw">
|
||
</td>
|
||
<td></td>
|
||
</tr>
|
||
</table>
|
||
</fieldset>
|
||
|
||
<FIELDSET>
|
||
<LEGEND><B> Смена email </B></LEGEND>
|
||
<TABLE>
|
||
<TR>
|
||
<TD style="text-align: right">
|
||
Ваш игровой пароль:
|
||
</TD>
|
||
<TD>
|
||
<label>
|
||
<INPUT form="security" TYPE=password NAME=oldpsw size=15 maxlength=31>
|
||
</label>
|
||
</TD>
|
||
</TR>
|
||
<TR>
|
||
<TD style="text-align: right">
|
||
Прежний email:
|
||
</TD>
|
||
<TD>
|
||
<label>
|
||
<INPUT form="security" TYPE=text NAME=oldemail size=20 maxlength=50>
|
||
</label>
|
||
</TD>
|
||
</TR>
|
||
<TR>
|
||
<TD style="text-align: right">
|
||
Новый email:
|
||
</TD>
|
||
<TD>
|
||
<label>
|
||
<INPUT form="security" TYPE=text NAME=newemail size=20 maxlength=50>
|
||
</label>
|
||
</TD>
|
||
</TR>
|
||
<TR>
|
||
<TD style="text-align: center" colspan=2>
|
||
<INPUT form="security" TYPE=submit value="Сменить email" name=changeemail>
|
||
</TD>
|
||
</TR>
|
||
</TABLE>
|
||
</FIELDSET>
|
||
<FIELDSET>
|
||
<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='Удалить секретный ключ'><br>
|
||
<?php endif; ?>
|
||
<input form='security' type='submit' name='newtotp' value='Создать новый секретный ключ'><br>
|
||
</FIELDSET>
|
||
</div>
|
||
</div>
|
||
|
||
<script>
|
||
let elem = document.getElementById('se-pre-con');
|
||
elem.parentNode.removeChild(elem);
|
||
</script>
|