public static function check($items = array()) { $source = filter_input_array(INPUT_POST); $instance = new Validation(); foreach ($items as $item => $rules) { $itemName = isset($rules['name']) ? $rules['name'] : 'No Name'; foreach ($rules as $rule => $ruleValue) { $value = trim($source[$item]); if ($rule === 'required' && empty($value)) { $instance->addError("{$itemName} is required"); } else { if (!empty($value)) { switch ($rule) { case 'min': if (strlen($value) < $ruleValue) { $instance->addError("{$itemName} must be at least {$ruleValue} characters long"); } break; case 'max': if (strlen($value) > $ruleValue) { $instance->addError("{$itemName} cannot be longer than {$ruleValue} characters"); } break; case 'matches': if ($value != $source[$ruleValue]) { $instance->addError("{$ruleValue} must match {$item} "); } break; case 'unique': $check = $instance->_db->get($ruleValue, array($item, '=', $value)); if ($check->count()) { $instance->addError("{$itemName} must be unique"); } break; case 'phone': break; case 'email': break; case 'website': $preg = "/^(https?:\\/\\/)([\\da-z\\.-]+)\\.([a-z\\.]{2,6})(\\/([\\da-z\\.-]+))*\\/?(([\\w\\.-]+)\\.([\\da-z]{2,6}))?((\\#[\\w\\.-]+)|(\\?([\\da-z]+(=[\\da-z]+)?)(&([\\da-z]+(=[\\da-z]+)?))*))?/i"; if (!preg_match($preg, $value)) { $instance->addError("{$itemName} must be a valid website"); } } } } } } if (empty($instance->errors())) { $instance->confirm(); } return $instance; }
$logs = check(strval($_POST['logs'])); $pars = check(strval($_POST['pars'])); $pars2 = check(strval($_POST['pars2'])); $provkod = check(strtolower($_POST['provkod'])); $invite = !empty($config['invite']) ? check(strval($_POST['invite'])) : ''; $meil = !empty($config['regmail']) ? strtolower(check(strval($_POST['meil']))) : ''; $domain = !empty($config['regmail']) ? utf_substr(strrchr($meil, '@'), 1) : ''; $gender = $_POST['gender'] == 1 ? 1 : 2; $registration_key = ''; $_SESSION['reglogs'] = $logs; $_SESSION['regmeil'] = $meil; $_SESSION['gender'] = $gender; $validation = new Validation(); $validation->addRule('equal', array($provkod, $_SESSION['protect']), 'Проверочное число не совпало с данными на картинке!')->addRule('regex', array($logs, '|^[a-z0-9\\-]+$|i'), 'Недопустимые символы в логине. Разрешены знаки латинского алфавита, цифры и дефис!', true)->addRule('regex', array($pars, '|^[a-z0-9\\-]+$|i'), 'Недопустимые символы в пароле. Разрешены знаки латинского алфавита, цифры и дефис!', true)->addRule('email', $meil, 'Вы ввели неверный адрес e-mail, необходим формат name@site.domen!', $config['regmail'])->addRule('string', $invite, 'Слишком длинный или короткий пригласительный ключ!', $config['invite'], 15, 20)->addRule('string', $logs, 'Слишком длинный или короткий логин!', true, 3, 20)->addRule('string', $pars, 'Слишком длинный или короткий пароль!', true, 6, 20)->addRule('equal', array($pars, $pars2), 'Ошибка! Введенные пароли отличаются друг от друга!')->addRule('not_equal', array($logs, $pars), 'Пароль и логин должны отличаться друг от друга!'); if (ctype_digit($pars)) { $validation->addError('Запрещен пароль состоящий только из цифр, используйте буквы!'); } if (substr_count($logs, '-') > 2) { $validation->addError('Запрещено использовать в логине слишком много дефисов!'); } if (!empty($logs)) { // Проверка логина или ника на существование $reglogin = DB::run()->querySingle("SELECT `users_id` FROM `users` WHERE LOWER(`users_login`)=? OR LOWER(`users_nickname`)=? LIMIT 1;", array(strtolower($logs), strtolower($logs))); $validation->addRule('empty', $reglogin, 'Пользователь с данным логином или ником уже зарегистрирован!'); // Проверка логина в черном списке $blacklogin = DB::run()->querySingle("SELECT `black_id` FROM `blacklist` WHERE `black_type`=? AND `black_value`=? LIMIT 1;", array(2, strtolower($logs))); $validation->addRule('empty', $blacklogin, 'Выбранный вами логин занесен в черный список!'); } if (!empty($config['regmail']) && !empty($meil)) { // Проверка email на существование $regmail = DB::run()->querySingle("SELECT `users_id` FROM `users` WHERE `users_email`=? LIMIT 1;", array($meil));
break; ############################################################################################ ## Изменение пароля ## ############################################################################################ ############################################################################################ ## Изменение пароля ## ############################################################################################ case 'editpass': $uid = !empty($_GET['uid']) ? check($_GET['uid']) : 0; $newpass = isset($_POST['newpass']) ? check($_POST['newpass']) : ''; $newpass2 = isset($_POST['newpass2']) ? check($_POST['newpass2']) : ''; $oldpass = isset($_POST['oldpass']) ? check($_POST['oldpass']) : ''; $validation = new Validation(); $validation->addRule('equal', array($uid, $_SESSION['token']), 'Неверный идентификатор сессии, повторите действие!')->addRule('equal', array(md5(md5($oldpass)), $udata['users_pass']), 'Введенный пароль не совпадает с данными в профиле!')->addRule('equal', array($newpass, $newpass2), 'Новые пароли не одинаковые!')->addRule('string', $newpass, 'Слишком длинный или короткий новый пароль!', true, 6, 20)->addRule('regex', array($newpass, '|^[a-z0-9\\-]+$|i'), 'Недопустимые символы в пароле, разрешены знаки латинского алфавита, цифры и дефис!', true)->addRule('not_equal', array($log, $newpass), 'Пароль и логин должны отличаться друг от друга!'); if (ctype_digit($newpass)) { $validation->addError('Запрещен пароль состоящий только из цифр, используйте буквы!'); } if ($validation->run()) { DB::run()->query("UPDATE `users` SET `users_pass`=? WHERE `users_login`=? LIMIT 1;", array(md5(md5($newpass)), $log)); if (!empty($udata['users_email'])) { sendMail($udata['users_email'], 'Изменение пароля на сайте ' . $config['title'], nl2br("Здравствуйте, " . nickname($log) . " \nВами была произведена операция по изменению пароля \n\nВаш новый пароль: " . $newpass . " \nСохраните его в надежном месте \n\nДанные инициализации: \nIP: " . $ip . " \nБраузер: " . $brow . " \nВремя: " . date('j.m.y / H:i', SITETIME))); } unset($_SESSION['log'], $_SESSION['par']); notice('Пароль успешно изменен!'); redirect("login.php"); } else { show_error($validation->getErrors()); } echo '<img src="/images/img/back.gif" alt="image" /> <a href="account.php">Вернуться</a><br />'; break; ############################################################################################
/** * Validates the current request against the specified parameter list. * If any of the specified parameters are found to be null or empty in * the current request the validation will fail and the request should be * marked invalid. * * @param array $attributes list of attributes to validate. * @param boolean <code>$failfast</code> true if this validation should * fail fast (return on first encounter of invalid attribute). * * @return true if the current request validates; otherwise false. */ protected function validate($parameters, $failfast = false) { $result = new Validation(); if (!is_array($parameters)) { return $result; } $result->setValid(true); foreach ($parameters as $parameter) { $value = $this->get($parameter); if ($value === NULL or $value === '' or empty($value)) { $result->setValid(false); $result->addError($parameter); if ($failfast) { return $result; } } } return $result; }
$validate = new Validation(); $validate->check($_POST, array('Username' => array('required' => true), 'Password' => array('required' => true))); $data = array(); $data['Success'] = false; if ($validate->passed()) { $user = new User(); $login = $user->login($_POST['Username'], Hash::make($_POST['Password'])); if ($login) { if ($user->isActivated($_POST['Username'])) { $data['Success'] = true; $data['Redirect'] = 'Index.php'; $data['Session'] = Session::get(Config::get('session/session_name')); echo json_encode($data); } else { $data['Success'] = false; $validate->addError("Account is not activated, please check your email"); $data['Errors'] = $validate->Errors(); echo json_encode($data); } } else { $data['Success'] = false; $validate->addError("Wrong password or Username"); $data['Errors'] = $validate->Errors(); echo json_encode($data); } } else { $data['Errors'] = $validate->Errors(); $data['Success'] = false; echo json_encode($data); } }
$client_insert['client_id'] = $pdo->lastInsertId(); /* Hitórico */ $pdo->prepare('INSERT INTO client_history ( client_id, user_id, status, typing, name, email, ip_address, call_date , start_call_date , time ) VALUES ( :client_id, :user_id, :status, :typing, :name, :email, :ip_address, NOW(), NULL, :time )')->execute($client_insert); /* Sessão */ $client_insert['name'] = $name; $user = array('user_id' => 0, 'name' => NULL); $session = new Session(); $session->register('client', $client_insert); $session->register('client_user', $user); header('Location: main.php'); exit; } else { $vld->addError('Já existe um cliente com o e-mail informado'); } } } $tpl->assign('error', $vld->getErrorsAsHtml()); $stmt = $pdo->prepare('SELECT COUNT(*) FROM user WHERE time > :time AND status = :status'); $stmt->bindValue('time', $lifeTime); $stmt->bindValue('status', 1); $stmt->execute(); if ($stmt->fetchColumn() == 0) { $tpl->block('info'); } else { $tpl->block('form'); } $tpl->show();
/** * Form token validation * @param array $validations The array of validation rules * @return void */ public static function validate($validations = null) { if (!isset($_POST['lc_formToken_' . _cfg('formTokenName')])) { return false; } $token = _decrypt(session_get(_cfg('formTokenName'))); $postedToken = _decrypt(_post($_POST['lc_formToken_' . _cfg('formTokenName')])); $result = false; # check token first if ($token == $postedToken) { # check referer if it is requesting in the same site if (isset($_SERVER['HTTP_REFERER']) && $_SERVER['HTTP_REFERER'] && _cfg('siteDomain')) { $siteDomain = _cfg('siteDomain'); $siteDomain = preg_replace('/^www\\./', '', $siteDomain); $parsedURL = parse_url($_SERVER['HTTP_REFERER']); $parsedURL['host'] = preg_replace('/^www\\./', '', $parsedURL['host']); if (strcasecmp($siteDomain, $parsedURL['host']) == 0) { $result = true; } } } if ($result == false) { Validation::addError('', _t('Error occured during form submission. Please refresh the page to try again.')); return false; } if ($validations && Validation::check($validations) === false) { return false; } return true; }
<?php require_once '../util/header.php'; require_once 'includes.php'; $session = new Session(); $session->checkSession('user'); $vld = new Validation(); $vld->validate(); if ($vld->hasErrors() == false) { extract($_POST, EXTR_SKIP); $pdo = PDOConnection::getInstance(); $user_session = $session->get('user'); $stmt = $pdo->prepare('SELECT * FROM user WHERE user_id = :user_id'); $stmt->bindValue('user_id', $user_session['user_id']); $stmt->execute(); $user = $stmt->fetch(); if (sha1($password . $systemPasswordSalt) != $user['password']) { $vld->addError('Senha atual não confere'); } else { $stmt = $pdo->prepare('UPDATE user SET password = :password WHERE user_id = :user_id'); $stmt->bindValue('user_id', $user_session['user_id']); $stmt->bindValue('password', sha1($new_password . $systemPasswordSalt)); $stmt->execute(); $vld->addMessage('Senha alterada com sucesso'); } } $vld->jsonResult();
$stmt->bindParam('user', $user); $stmt->bindParam('password', sha1($password . $systemPasswordSalt)); $stmt->bindValue('status', 1); $stmt->execute(); if ($stmt->fetchColumn() > 0) { $stmt = $pdo->prepare('SELECT COUNT(*) FROM user WHERE user = :user AND time > :time AND status = :status'); $stmt->bindParam('user', $user); $stmt->bindValue('time', $lifeTime); $stmt->bindValue('status', 1); $stmt->execute(); if ($stmt->fetchColumn() == 0) { $stmt = $pdo->prepare('SELECT * FROM user WHERE user = :user AND password = :password AND status = :status LIMIT 1'); $stmt->bindParam('user', $user); $stmt->bindParam('password', sha1($password . $systemPasswordSalt)); $stmt->bindValue('status', 1); $stmt->execute(); $user = $stmt->fetch(PDO::FETCH_ASSOC); $session = new Session(); $session->register('user', $user); header('Location: main.php'); exit; } else { $vld->addError('Já existe um usuário logado com os dados informados'); } } else { $vld->addError('Usuário ou senha inválido'); } } } $tpl->assign('error', $vld->getErrorsAsHtml()); $tpl->show();
<?php require_once '../util/header.php'; require_once 'includes.php'; $session = new Session(); $session->checkSession('user'); $vld = new Validation(); $vld->validate(); if ($vld->hasErrors() == false) { extract($_POST, EXTR_SKIP); $headers = "From: <{$from}>\r\n"; $headers .= "Content-type: text/html; charset=utf-8\r\n"; if (@mail($to, $subject, $message, $headers)) { $vld->addMessage('E-mail enviado com sucesso'); } else { $vld->addError('Falha ao enviar E-mail, tente novamente'); } } $vld->jsonResult();
<?php require_once '../util/header.php'; require_once 'includes.php'; $session = new Session(); $session->checkSession('user'); $vld = new Validation(); $vld->validate(); if ($vld->hasErrors() == false) { extract($_POST, EXTR_SKIP); $pdo = PDOConnection::getInstance(); $stmt = $pdo->prepare('SELECT COUNT(*) FROM user WHERE user = :user'); $stmt->bindValue('user', $user); $stmt->execute(); if ($stmt->fetchColumn() > 0) { $vld->addError('Já existe um cadastro com o usuário (' . $user . ')'); } else { $user_add = array('status' => 1, 'typing' => 0, 'name' => $name, 'level' => $level, 'email' => $email, 'photo' => NULL, 'user' => $user, 'password' => sha1($password . $systemPasswordSalt), 'time' => 0); $pdo->prepare('INSERT INTO user ( status, typing, level, name, email, photo, user, password, register_date, time ) VALUES ( :status, :typing, :level, :name, :email, :photo, :user, :password, NOW(), :time )')->execute($user_add); $vld->addMessage('Usuário (' . $user . '), adicionado com sucesso'); } } $vld->jsonResult();