/** * Если выставлена опция "оборачивать значения", то оборачивает * значение в кавычки, если это строка (и она не "NULL"). * Если передается null, возаращается строка NULL. Если число, то оно * не оборачивается кавычками. Если это массив из вышеперечисленного, * делает это для каждого значения массива. * * @author Anthony Boutinov * * @param string|number|null|array &$sql Значение для санитизации * @param bool $do_return Возвращать ли новое значение (true) или изменять саму переменную (false). Поведение по умолчанию: изменять саму переменную. * @param int $max_length Ограничение на длину значения. По умолчанию, 2048 символов. * @retval typeof($sql) Возаращаемое значение. По умолчанию, функция ничего не возвращает. */ private function innerSanitize(&$sql, $wrap_values, $do_return, $max_length = null) { if (!isset($wrap_values)) { $wrap_values = true; } if (!isset($do_return)) { $do_return = false; } if (!isset($max_length)) { $max_length = 2048; } if (is_array($sql)) { if ($do_return == true) { Error::fatalError('DEBUG Error in DBInterface::innerSanitize(): $do_return == true не поддерживается для массивов!'); } foreach ($sql as $key => $value) { $val = $this->conn->real_escape_string($value); if (strlen($val) > $max_length) { Notification::add('<b>Warning</b>: trying to sanitize data which is ' . length($val) . ' characters long! Data truncated', 'warning'); $val = substr($val, 0, $max_length); } $sql[$key] = $this->wrapSanitizedValue($val, true); } } else { if (strlen($sql) > $max_length) { Notification::add('<b>Warning</b>: trying to sanitize data which is ' . length($sql) . ' characters long! Data truncated', 'warning'); $sql = substr($sql, 0, $max_length); } $sql = $this->conn->real_escape_string($sql); if ($wrap_values == true) { return $this->wrapSanitizedValue($sql, $do_return); } else { return $sql; } } }
/** * @author Михаил Полюбай, Anthony Boutinov * * @param string|bool $active Сделать активным или неактивным ('T', 'F', либо bool значение) * @param int $id_db_user ID_DB_USER */ public function setActiveDBUser($active, $id_db_user) { $this->sanitize($active); $this->sanitize($id_db_user); if ($active === 'T' || $active === true) { $active = 'T'; } else { if ($active === 'F' || $active === false) { $active = 'F'; } else { Error::fatalError('DEBUG Error: Передан неверный параметр в setActiveDBUser'); } } $sql = 'update CM$DB_USER set IS_ACTIVE="' . $active . '", ID_DB_USER_MODIFIED=' . $this->id_db_user_editor . ' where ID_DB_USER='******'T') { // Починить для него недостающие переменные, если с момента его деактивации были добавлены новые VARS в CM$DICITONARY $this->fixVarsForOneDBUser($id_db_user); } }
<?php include 'includes/core/session.php'; if (isset($_POST['form-name'])) { // Экран восстановления пароля if ($_POST['form-name'] == 'forget-password-recovery-screen') { include 'includes/modules/admin-login-forgetPasswordRecovery.php'; exit; } else { if ($_POST['form-name'] == 'forget-password-recovery') { if (!isset($_POST['login'])) { Error::fatalError('DEBUG Error in admin-login.php: login not set!'); } $responce = $database->initiatePasswordReset($_POST['login']); if (!$responce) { Notification::add('Пользователь с таким логином/email не найден.', 'danger'); } else { $password_reset_link = $BASE_URL . 'admin-login.php?l=' . $responce['LOGIN'] . '&t=' . $responce['PASSWORD_RESET_TOKEN']; require_once 'includes/core/mail_config.php'; $mail->addAddress($responce['EMAIL']); $mail->Subject = "Сброс пароля — Re[Spot]"; $mail->Body = "Для смены пароля перейдите по ссылке:\n{$password_reset_link}\n\nСообщение сгенерировано автоматически."; if (!$mail->send()) { Notification::add('Невозможно отправить сообщение.<br>Ошибка Mailer: ' . $mail->ErrorInfo, 'danger'); } else { Notification::add('Сообщение для сброса пароля отправлено на <strong>' . $responce['EMAIL'] . '</strong>', 'success'); } } } else { if ($_POST['form-name'] == 'password-reset-set-new') { if (isset($_POST['LOGIN']) && isset($_POST['PASSWORD_RESET_TOKEN'])) {
header("Location: {$routerAdmin}"); exit; } else { // Если получаются данные от роутера if (isset($_POST['router-login']) && isset($_POST['router-password'])) { // Получить данные от роутера для функционирования страницы login $router_login = $_POST['router-login']; $router_pasword = password_hash($_POST['router-password'], PASSWORD_BCRYPT); } else { // Если данные роутера записаны в сессии if (isset($_SESSION['router-login']) && isset($_SESSION['router-password'])) { // Возобновить $router_login = $_SESSION['router-login']; $router_pasword = $_SESSION['router-password']; } else { Error::fatalError('Ошибка: Не заданы данные для авторизации.'); } } } } } } // Если есть данные для входа или страница не защищена (в последнем просто подключается к бд) if ($router_login && $router_pasword || $cli_login && $cli_password || $id_cli || isset($current_page_is_not_protected) && $current_page_is_not_protected || !$router_login && !$router_pasword && !$cli_login && !$cli_password && !$id_cli) { $database = new DBWiFiInterface($servername, $username, $password, $dbname, $router_login, $router_pasword, $cli_login, $cli_password, $id_cli); // Если пользователь валиден if ($database->is_valid()) { if ($database->is_router()) { $_SESSION['router-login'] = $router_login; $_SESSION['router-password'] = $router_pasword; } else {
<?php $current_page_is_not_protected = true; include 'includes/core/session.php'; header("Content-type: image/jpeg"); if (isset($_GET['id_db_user'])) { $timestamp = isset($_GET['t']) ? $_GET['t'] : NULL; echo $database->getPostImage($_GET['id_db_user'], $timestamp); } else { Error::fatalError('Параметры не заданы'); }
<?php include 'includes/core/session.php'; $protector->protectPageAdminPage(); if ($database == false) { Error::fatalError('DEBUG error in includes/base/admin.php: $database not found'); } // Название компании $companyName = $database->getValueByShortName('COMPANY_NAME')['VALUE']; // Постфикс заголовка окна панели управления $adminPanelTitle = '— Панель управления ' . $companyName; // Отрисовывать ли на страницу полное содержимое в нормальном виде. // Менять на false в нужных блоках в страницах-агрегаторах // (Dashboard, в частности). $drawFullContent = true;