Файл: upload/pages/auth/register.php
Строк: 145
<?php
require_once ($_SERVER['DOCUMENT_ROOT'] . '/core/core.php');
if (isset($user['id'])) {
showAlert('Ошибка', 'fail', 'Вы уже авторизованы');
RedirectToPage('/');
exit();
}
ob_start();
run_action('render_captcha');
$captcha = ob_get_clean();
ob_start();
run_action('render_oauth_buttons');
$oauth = ob_get_clean();
$page_html = $view->render('pages/auth/register.html', [
'csrf' => $_SESSION['csrf_token'],
'captcha' => $captcha,
'oauth' => $oauth,
'home' => homeLink(),
'templ_home' => TemplateLink($theme)
]);
require_once ($_SERVER['DOCUMENT_ROOT'] . '/layout.php');
if(isset($_POST['reg'])) {
check_csrf();
$login = chars($_POST['login']);
$email = chars($_POST['email']);
$pass = chars($_POST['pass']);
$fingerprint = $_POST['fingerprint'];
$r_pass = chars($_POST['r_pass']);
$iss_login = dbquery("SELECT COUNT(`id`) FROM `users` WHERE `login` = ?", [$login]);
$iss_email = dbquery("SELECT COUNT(`id`) FROM `users` WHERE `email` = ?", [$email]);
if (!run_filter('verify_captcha', true)) {
showAlert('Ошибка', 'fail', 'Капча не пройдена!');
ReloadPage();
exit();
}
if (isset($login)) {
if (isset($pass)){
if ((mb_strlen($pass) >= 5) && (mb_strlen($pass) <= 25)) {
if ($pass == $r_pass) {
if ((mb_strlen($login) >= 3) && (mb_strlen($login) <= 13)) {
if (DataResult($iss_login) < 1) {
if (DataResult($iss_email) < 1) {
if (preg_match('|^[a-z0-9-]+$|i', $login)) {
$salt = genRandomString(15);
$passHash = CryptorPass($pass, $salt);
create_user($login, $passHash, $email, $salt, '0', 'local', 'local', $fingerprint, $config);
$uid = InGetLastInsertId();
if ($config['demo'] == true) {
$order = OrderGenKey();
insertTransaction(5000, $uid, 1, 1, 1, $order);
}
if ($uid == 1) {
dbquery("UPDATE `users` SET `level_us` = '2' WHERE `id` = '1'");
}
$password = $passHash;
require_once ($_SERVER['DOCUMENT_ROOT'] . '/core/elements/autolog.php');
session_start();
$_SESSION['newEl'] = 'value';
if (!empty($_POST)) {
$_SESSION['login'] = chars($_POST['login']);
}
exit();
} else {
showAlert('Ошибка', 'fail', 'Кириллица запрещена в логине!');
ReloadPage();
exit();
}
} else {
showAlert('Ошибка', 'fail', 'Такой email уже существует!');
ReloadPage();
exit();
}
} else {
showAlert('Ошибка', 'fail', 'Такой логин уже существует!');
ReloadPage();
exit();
}
} else {
showAlert('Ошибка', 'fail', 'Введите логин от 3 до 13 символов!');
ReloadPage();
exit();
}
} else {
showAlert('Ошибка', 'fail', 'Пароли не совпадают!');
ReloadPage();
exit();
}
} else {
showAlert('Ошибка', 'fail', 'Введите пароль от 5-и до 25-и символов!');
ReloadPage();
exit();
}
} else {
showAlert('Ошибка', 'fail', 'Вы не ввели пароль!');
ReloadPage();
exit();
}
} else {
showAlert('Ошибка', 'fail', 'Вы не ввели логин!');
ReloadPage();
exit();
}
}
?>
<script>
const checkbox = document.getElementById('agree');
const fakeBtn = document.getElementById('fakeBtn');
const realBtn = document.getElementById('realBtn');
const form = document.getElementById('login');
// переключаем кнопки
checkbox.addEventListener('change', function() {
if (this.checked) {
fakeBtn.style.display = 'none';
realBtn.style.display = 'inline-block';
} else {
fakeBtn.style.display = 'inline-block';
realBtn.style.display = 'none';
}
});
// защита: проверка при отправке
form.addEventListener('submit', function(e) {
if (!checkbox.checked) {
e.preventDefault(); // блокируем отправку
alert('Необходимо согласиться с условиями!');
}
});
</script>
<script>
async function getFingerprint() {
// создаём уникальный ID в localStorage (самый важный элемент)
if (!localStorage.getItem('fw_fp')) {
localStorage.setItem('fw_fp', crypto.randomUUID());
}
const fp_raw = [
navigator.userAgent,
navigator.language,
screen.width + 'x' + screen.height,
Intl.DateTimeFormat().resolvedOptions().timeZone,
navigator.platform,
navigator.hardwareConcurrency || 'hc',
navigator.deviceMemory || 'dm',
localStorage.getItem('fw_fp')
].join('::');
const encoder = new TextEncoder();
const data = encoder.encode(fp_raw);
const hashBuffer = await crypto.subtle.digest('SHA-256', data);
const hashArray = Array.from(new Uint8Array(hashBuffer));
const hashHex = hashArray.map(b => b.toString(16).padStart(2, '0')).join('');
return hashHex;
}
document.addEventListener('DOMContentLoaded', async () => {
const fp = await getFingerprint();
document.querySelector('input[name="fingerprint"]').value = fp;
});
</script>