Jump to content
SeiShiArr

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

Recommended Posts

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

В общем, после перехода на версию 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>.+) (ну думаю не для кого ни секрет, что это за маска такая).

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites
2 часа назад, Desti сказал:

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

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

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

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

Share this post


Link to post
Share on other sites
3 часа назад, Desti сказал:

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

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

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

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

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.

×