game/modules_data/_changepass.php

200 lines
9.5 KiB
PHP
Raw Normal View History

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