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