Перейти к содержанию
SeiShiArr

Авторизация вне форума.

Рекомендуемые сообщения

Всем добрый день. Вроде, эта тема тут поднималась, но в ней в итоге ничего не ответили.

В общем, после перехода на версию ips 4.3.6 с другой CMS, я столкнулся с такой проблемой, как blowfish3. Серьезно, я никогда не натыкался на этот метод и не понимаю как он работает.

Но я все же попытался что-то наколякать. Вроде работоспособный метод, но все равно не канает:

	<?php
@error_reporting(E_ALL ^ E_WARNING ^ E_DEPRECATED ^ E_NOTICE);
@ini_set('error_reporting', E_ALL ^ E_WARNING ^ E_DEPRECATED ^ E_NOTICE);
@ini_set('display_errors', true);
	$config = [
    'db' => [
        'host'      => 'localhost', /* Хост БД */
        'user'      => 'forum_u1', /* Юзер БД */
        'name'      => 'forum', /* Назваение БД */
        'pass'      => '' /* Пароль от БД */
    ], 
    'users' => [
        //!!!!!НЕ МЕНЯЙ!!!!!
        'table'     => 'core_members', /* Таблица с юзерами */
        'name'      => 'name', /* Колонка с никами юзеров */
        'mail'      => 'email', /* Колонка с почтой юзеров */
        'pass'      => 'members_pass_hash', /* Колонка с паролями пользователей */
        //!!!!!НЕ МЕНЯЙ!!!!! 
    ],
    'access_key'    => 'code', /* Секретный ключ для авторизации */
    'auth_ip'        => 'localhost' /* IP-адресс сервера, который будет обращаться к скрипту */
];
	if ($_SERVER['REMOTE_ADDR'] != $config['auth_ip']) {
    die('К сожалению у вас нету доступа к данному содержимому!');
}
	if (isset($_GET['login']) && isset($_GET['password']) && $_GET['access_key'] == $config['access_key']) {
    
    function checkPass($getPass, $getHashPass) {
        if (password_verify($getPass, $getHashPass)) {
             return true;
        } else {
             return false;
        }
    }
    
    $db = new mysqli($config['db']['host'], $config['db']['user'], $config['db']['pass'], $config['db']['name']);
    if ($db->connect_errno) {
        die($db->connect_error);
    } else {
        
        $data = [
            'user' => $db->real_escape_string($_GET['login']),
            'pass' => $db->real_escape_string($_GET['password']),
        ];
        
        $getUser = $db->query("SELECT * FROM `{$config['users']['table']}` WHERE `{$config['users']['name']}`='{$data['user']}' OR `{$config['users']['name']}`='{$data['user']}' LIMIT 1");
        if ($getUser->num_rows) {
            $getUser = $getUser->fetch_assoc();
            if (checkPass($data['pass'], $getUser[$config['users']['pass']])) {
                die("OK:{$getUser['name']}");
            } else {
                die('Incorrect login or password'); 
            }
        } else {
            die('Incorrect login or password');
        }
    }
    
    $db->close(); 
} else {
    die ('Empty login or password');
}
?>
	

Соль в том, что при запросе forum.example.com/auth.php?username=%login%&password=%password%&access_key=code, должна выводиться маска OK:(?<username>.+) (ну думаю не для кого ни секрет, что это за маска такая).

Прошу вас указать на мои ошибки и желательно показать метод решения этой задачи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы передаете в запросе username=%login%, а проверяете $_GET['login'], естественно, ничего не работает. Поменяйте в двух местах на $_GET['username'] и всё полетит. 

Или, что проще, передавайте login=%login% :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
2 часа назад, Desti сказал:

Вы передаете в запросе username=%login%, а проверяете $_GET['login'], естественно, ничего не работает. Поменяйте в двух местах на $_GET['username'] и всё полетит. 

Или, что проще, передавайте login=%login% :)

И правда все заработало. Спасибо ВаМ большое.

P.S.: Только все равно пишет Incorrect login or password. Может, где-то в скрипте самом ошибки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
3 часа назад, Desti сказал:

Вы передаете в запросе username=%login%, а проверяете $_GET['login'], естественно, ничего не работает. Поменяйте в двух местах на $_GET['username'] и всё полетит. 

Или, что проще, передавайте login=%login% :)

И правда все заработало. Спасибо ВаМ большое.

P.S.: Только все равно пишет Incorrect login or password. Может, где-то в скрипте самом ошибки?

UPD: Ошибку нашел и исправил. Еще раз спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×