Иконка ресурса

SteamID Protect with SourceBans 1.0

Impulse72

Участник
Сообщения
244
Реакции
163
  • Автор ресурса
  • #1
SteamID Protect with SourceBans

Оу, ребятки. Может все таки найдется хороший человек который сможет совместить SourceBans с SteamID Protect? Особенно пользователям 34й версии нужен этот плагин, и без него сервера подвергаются риску подбора ИДа.
Сам то я ничего не понимаю в этом всем, но примерно хотелось бы видеть работу плагина как то так:
Список всех администраторов из SourceBans лежит в таблице "sb_admins", вот что бы с этой таблицы брались значения : user (Ник админа в СБ), authid(STEAM_ID), password(Пароль от профиля СБ) и генерировался список администраторов в файл steamprotect.txt. И что бы при каждом изменении таблицы (удалили\добавили админа) - такие же происходили изменения и в файле.
Конечно пароли от СБ в бд хранятся в кодировке, но я не знаю, возможно ли эти то пароли использовать...
Примерно как то так...
Я думаю что многие будут признательны тому, кто это все осуществит

Почему бы и нет?

Описание:
Защищает Ваш админский стим ид от подмены, путем логина и пароля из таблицы системы SourceBans.

Требования:

Поддерживаются игры:
  • Только CS: Source

Перед тем как зайти нужно написать в консоли, либо сразу закинуть в autoexec.cfg:
setinfo <1> <2>, где 1 - это Ваш логин в системе, 2 - пароль.
Хочу заметить, что пароль не от учетной записи, а тот, который Вы введете в детальных настройках админа после установки.

Установка:
Ну, во-первых, файлы плагина нужно раскидать по папкам. Думаю, что ни у кого трудностей с этим не выйдет.
В databases.cfg нужно добавить:
PHP:
"Protect"
{
    "driver"            "mysql"
    "database"            "Ваша база SB"
    "user"                "Ваш логин от базы"
    "pass"                "Ваш пароль от базы"
}

Во-вторых, веб часть. Договоримся, что картинки, на которые я буду ссылаться, находятся в архиве в папке image.
Предисловие. Почему нельзя просто использовать пароль от учетной записи системы? Все очень просто: Одинаковые пароли уже не есть хорошо; в серверной части недоступен механизм шифрования, который используется разрабами для шифрования пароля (sha1), но зато доступен другой. Мы будем использовать md5 + соль.
Для начала, отредактируем таблицу "sb_admins", добавив новое поле "protect", в котором и будет хранится наш пароль. Тип - varchar, размер - 128. В Navicat`е это выглядит как на картинке 1.
Далее, нужно изменить файлы системы, чтобы можно было устанавливать пароль. Как это сделать есть в архиве в текстовом файле Task.txt, но я продублирую и тут.
Открываем файл шаблона с названием page_admin_edit_admins_details.tpl.
Через поиск (Ктрл+ф3) находим {/if} и вставляем ПЕРЕД ним код:
PHP:
<tr>
    <tr>
    <td valign="top"><div class="rowdesc">{help_icon title="Protect Steamid" message="Type your password again to confirm."}SteamId Protect</div></td>
    <td>
    <div align="left">
        <input type="password" class="submit-fields" id="protect" name="protect" />
    </div>
</tr>

Открываем includes/СUserManager.php.
После функции encrypt_password, на всякий случай ее код:
PHP:
function encrypt_password($password, $salt=SB_SALT)
{
    return sha1(sha1($salt . $password));
}
Вставляем похожую функцию:
PHP:
function encrypt_password2($password, $salt, $salt1)
{
    return md5($password . $salt . $salt1);
}

Самые большие изменения потерпит файл admin.edit.admindetails.php, что находится в папке pages.

ПЕРЕД:
PHP:
    }
   
    // Only proceed, if there are no errors in the form
    if($error == 0)
    {
Вставляем
PHP:
if(!empty($_POST['protect']))
{
    $protect_changed = true;
    if(strlen($_POST['protect']) < 3)
    {
        $error++;
        $errorScript .= "$('protect.msg').innerHTML = 'Your password must be at-least 3 characters long.';";
        $errorScript .= "$('protect.msg').setStyle('display', 'block');";
    }
}

ПЕРЕД
PHP:
 // set the basic fields
$edit = $GLOBALS['db']->Execute("UPDATE ".DB_PREFIX."_admins SET
                            `user` = ?, `authid` = ?, `email` = ?
                            WHERE `aid` = ?", array($a_name, $a_steam, $a_email, $_GET['id']));
Дописываем:
PHP:
if($protect_changed)
{
    $name = $_POST['adminname'];
    $edit = $GLOBALS['db']->Execute("UPDATE ".DB_PREFIX."_admins SET
                            `protect` = ?
                            WHERE `aid` = ?", array($userbank->encrypt_password2($_POST['protect'], $name[0], $name[2]), $_GET['id']));
}

И последний простенький шаг: ПОСЛЕ
PHP:
$serverpw_changed = false;
рисуем
PHP:
$protect_changed = false;

Хочу подчеркнуть, что "готовые файлы" в архиве сделаны из свежескаченной сборки с сайта разработчиков, но тем не менее, возможно, Вам помогут разобраться.
Ничего сложного нет, если включить голову. В итоге у нас появится штука, изображенная на рисунке 2. Это и есть наш пароль, который нужно писать в клиенте

Переменные:
C-подобный:
ps_ban - При "1" будет банить тех, кто попытался зайти с подменой. Бан по IP.
ps_ban_time - Длительность бана в минутах. Не имеет смысла ставить 0, так как далеко не у всех статичный IP. Это лишь усложнит жизнь "мего-хацкеру".
ps_logs_dir - директория логов относительно cstrike. Каждый день там будет появлятся файл и будут совершаться записи о успешном или не очень заходе админов на сервер.
ps_serverid - сервер ID для этого сервера. Находится в cfg системы. Я не совсем понял структуру, но вроде бы если -1, то все админы, что зареганы в SB имеют там админ права. Если иное число, то только те админы, у которых стоит "галочка" напротив этого сервера в SB. Поправьте, если не прав.

P.S.И еще кое что. Я протестировал плагин только на OB версии CSS и он 100% работает. Владельцам серверов более старой версии просьба проверить у себя, т.к. в основном он будет полезен именно для Вас. Предложения, замечания и критика приветствуются в разумной мере.
 
Последнее редактирование модератором:

L.E.O.N

Source.org.ua
Сообщения
114
Реакции
7
Итак начну я первый : Вот что у меня пишет в логах :

L 06/11/2013 - 13:57:50: Error log file session closed.
L 06/11/2013 - 13:57:51: SourceMod error session started
L 06/11/2013 - 13:57:51: Info (map "de_dust2") (file "errors_20130611.log")
L 06/11/2013 - 13:57:51: [SM] Native "SQL_HasResultSet" reported: Invalid query Handle 0 (error: 4)
L 06/11/2013 - 13:57:51: [SM] Displaying call stack trace for plugin "protect.smx":
L 06/11/2013 - 13:57:51: [SM] [0] Line 80, C:\Рабстол\соурспавн\temp247.sp::SQL_Login()

Не знаю может так и должно быть но меня это волнует потому что я не хочу чтобы у меня на сервере были ошибки

Добавлено через 3 минуты
Вот что еще пишет в сб когда я редактирую админа (ставлю ему пароль на стим протект )

Debug
Unknown column 'protect' in 'field list'

SQL Query type: EXECUTE
Script: '/index.php'
SQL Query: UPDATE sb_admins SET `protect` = 'aaa63957f4a4a5d6dbe195f380ffe280' WHERE `aid` = 1
SQL Params:
 
Последнее редактирование:
  • Мне нравится
Реакции: R1KO

Impulse72

Участник
Сообщения
244
Реакции
163
  • Автор ресурса
  • #3
Редко захожу, так как никому не нужно было)

Unknown column 'protect' in 'field list'
Есть такая штука, как переводчик)
Если читать внимательно, то можно увидеть вот это:
Для начала, отредактируем таблицу "sb_admins", добавив новое поле "protect", в котором и будет хранится наш пароль. Тип - varchar, размер - 128. В Navicat`е это выглядит как на картинке 1.
Отсюда и ошибка на сервере, так как нет такого столбца.
 

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,377
Impulse72, предупреждение о количества символов не пашет.
Надо писать так
PHP:
<tr>
    <td valign="top"><div class="rowdesc">{help_icon title="Protect Steamid" message="Введите пароль."}SteamId Protect</div></td>
    <td>
    <div align="left">
        <input type="password" class="submit-fields" id="protect" name="protect" />
    </div>
	<div id="protect.msg" class="badentry"></div></td>
</tr>
 

Impulse72

Участник
Сообщения
244
Реакции
163
  • Автор ресурса
  • #5
Impulse72, предупреждение о количества символов не пашет.
Надо писать так
PHP:
<tr>
    <td valign="top"><div class="rowdesc">{help_icon title="Protect Steamid" message="Введите пароль."}SteamId Protect</div></td>
    <td>
    <div align="left">
        <input type="password" class="submit-fields" id="protect" name="protect" />
    </div>
	<div id="protect.msg" class="badentry"></div></td>
</tr>

Возможно проглядел что-то где-то, бывает)
 

Серый™

CS:S Server
Сообщения
2,925
Реакции
1,377
Плюс, всё сделал верно, но не пускает. И не банит.
Ник был такой -]N.M.[- Серый™ ジ
 
Последнее редактирование:

Impulse72

Участник
Сообщения
244
Реакции
163
  • Автор ресурса
  • #7
Я не стал бы выкладывать плагин, который не выполняет основной функции. Баги бывают конечно, но это от каши в голове от разных ЯП. Везде свои нюансы, забывается.
 

September

Участник
Сообщения
5,238
Реакции
2,742
  • Команда форума
  • #8
В папке cstrike/protect/ где хранятся логи, фиксируются дисконекты простых игроков
PHP:
L 11/17/2013 - 18:30:05: Admin archibalt disconnected from server.
L 11/17/2013 - 18:30:06: Admin Норвежский Кот*) disconnected from server.
L 11/17/2013 - 18:35:45: Admin GERKON disconnected from server.
L 11/17/2013 - 18:39:04: Admin Yuck | eks disconnected from server.
 

marlboro

Участник
Сообщения
146
Реакции
36
Плагин рабочий, но вот если логин и пароль не правильные он все равно не банит!
Оффтоп
 

byxue

Участник
Сообщения
104
Реакции
65
C-подобный:
L 03/12/2014 - 18:50:35: Info (map "ba_jail_electric_vip_v2") (file "errors_20140312.log")
L 03/12/2014 - 18:50:35: [SM] Plugin encountered error 15: Array index is out of bounds
L 03/12/2014 - 18:50:35: [SM] Displaying call stack trace for plugin "protect.smx":
L 03/12/2014 - 18:50:35: [SM]   [0]  Line 140, protect.sp::OnClientDisconnect()

Кто сможет исправить? Используем плагин из первого поста (в архиве который)
 

semjef

semjef.ru
Сообщения
993
Реакции
444
byxue, лови
 

Вложения

  • protect.sp
    11.6 КБ · Просмотры: 49
  • protect.smx
    8.6 КБ · Просмотры: 33

byxue

Участник
Сообщения
104
Реакции
65
C-подобный:
L 03/23/2014 - 19:34:57: SourceMod error session started
L 03/23/2014 - 19:34:57: Info (map "ba_jail_electric_vip_v2") (file "errors_20140323.log")
L 03/23/2014 - 19:34:57: [SM] Native "GetClientInfo" reported: Client 1 is not connected
L 03/23/2014 - 19:34:57: [SM] Displaying call stack trace for plugin "protect.smx":
L 03/23/2014 - 19:34:57: [SM]   [0]  Line 92, protect.sp::SQL_Login()
 

mouse777

Участник
Сообщения
9
Реакции
0
подскажите где поправить кодировку??
Disconnect: SteamId, ��� ������� �� �������, ������� �������..
 

byxue

Участник
Сообщения
104
Реакции
65
AlmazON, Можете добавить?

Вот что вылезло.
C-подобный:
L 08/19/2014 - 12:40:16: SourceMod error session started
L 08/19/2014 - 12:40:16: Info (map "") (file "errors_20140819.log")
L 08/19/2014 - 12:40:16: [SM] Native "GetClientInfo" reported: Client 2 is not connected
L 08/19/2014 - 12:40:16: [SM] Displaying call stack trace for plugin "protect.smx":
L 08/19/2014 - 12:40:16: [SM]   [0]  Line 92, protect.sp::SQL_Login()
L 08/19/2014 - 12:40:16: [SM] Native "GetClientInfo" reported: Client 3 is not connected
L 08/19/2014 - 12:40:16: [SM] Displaying call stack trace for plugin "protect.smx":
L 08/19/2014 - 12:40:16: [SM]   [0]  Line 92, protect.sp::SQL_Login()
L 08/19/2014 - 13:24:07: Error log file session closed.
 

byxue

Участник
Сообщения
104
Реакции
65
Точно, не ту проверку всунул) Не внимательно делал (о своём плагине больше думал). Выше перезалил.
А как это ты решил, если даже ещё не качал? Владислав Юдин вы?
Оффтоп
Он мой заместитель. Спасибо, сейчас попробуем.

C уважением, Никита
 

byxue

Участник
Сообщения
104
Реакции
65
Ну плагин работает?
Да, но есть ошибки.

C-подобный:
L 08/26/2014 - 15:59:37: [SM] Native "GetClientInfo" reported: Client 15 is not connected
L 08/26/2014 - 15:59:37: [SM] Displaying call stack trace for plugin "protect.smx":
L 08/26/2014 - 15:59:37: [SM]   [0]  Line 92, protect.sp::SQL_Login()
 
Сверху Снизу