game/modules_data/_changepass.php

200 lines
9.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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>