Перейти к содержанию
Авторизация  
Ryslik42

Защита администраторских команд

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

Ryslik42

Здравствуйте, уважаемые пользователи форума. Допустим, у Вас на сервере есть какая-либо дыра, которую Вы не можете исправить, или же, просто не подозреваете о её существовании. У меня лично была такая проблема, я долго искал решение проблемы и наткнулся на такую систему и решил поделиться с вами.

Подробнее: смысл системы в том, что у каждого Администратора свой пароль. Вероятность того что вам навредят при взломе сервера уменьшается в несколько раз!

 

Ко всем new добавьте:



new AdminLoggining[MAX_PLAYERS];   

Теперь нам нужно придумать пароль. Для каждого администратора отдельный пароль. Для этого создаем в ../scriptfiles файлик adminpasses.ini. Содержимое файлика:



ник = пароль

Теперь создаем непосредственно команду логина в админ-панель.



if(strcmp(cmd,"/logininadminpanel",true)==0 || strcmp(cmd,"/liapl",true)==0)
{
        if(PlayerInfo[playerid][pAdmin] > 0)
        {
            ShowPlayerDialog(playerid,16726,DIALOG_STYLE_INPUT,"Администраторская панель. Авторизация","Введите Ваш персональный администраторский пароль в окошко\nВам дается 3 попытки.","Принять","Отмена");
        }
}   

Теперь к диалогам добавляем

if(dialogid == 16726)//Если верный ид диалога
{
	if(response)//И если соглашено
	{
		new AdminName[32];
		GetPlayerName(playerid,AdminName,sizeof(AdminName));//Берем имя
		new namefile[20];
		new pass;
		format(namefile,sizeof(namefile),"%s",AdminName);
		new string[128];
		new iniOpen = ini_openFile("adminpasses.ini");
		ini_setInteger(iniOpen,namefile,pass);//забираем пасс
		ini_closeFile(iniOpen);
		if(pass == 0) return 0; //Если пасса не забрали, то отключаем
		new chanse;
		new passs = strval(inputtext);//забираем введенное
		if(passs == pass)
		{
			SendClientMessage(playerid,COLOR_LIGHTRED,"Вы успешно залогинились в системе!");
			AdminLoggining[playerid] = 1;//врубаем переменную догининга
		}
		else
		{
			if(chanse != 3)
			{
				SendClientMessage(playerid,COLOR_FADE1,"Вы ввели неверный пароль! Администрация оповещена.");
				format(string,sizeof(string),"%s ввел неверный пароль при логиннинге в адм-панель.",AdminName);
				SendAdminMessage(0x10F441AA, string);
				chanse++;
			}
			if(chanse == 3)
			{
				SendClientMessage(playerid,COLOR_FADE1,"Вы забанены за подбор пароля");
				Ban(playerid);
			}
		}
	}
}

В public OnPlayerDisconnect(playerid, reason) добавьте



 AdminLoggining[playerid] = 0; 

А в командах администратора вставляем:



if(AdminLoggining[playerid] != 1) return SendClientMessage(playerid,COLOR_FADE1,"Вы не залогинились ((/liap))");   

На этом все. Таким способом мы обезопасим сервер от школьников типа Fedya_Chy и т.п.

 

Автор John_Smith&Cliffka

Изменено пользователем Ryslik42
  • Like 2

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


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

Зачем создавать файлы по 150 раз, когда можно в акке держать инфу ._.

 
set        ini_setInteger(iniOpen,namefile,pass);//забираем пасс
Изменено пользователем st1ven

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


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

Как минимум массив AdminLogging можно было объявить как bool. Один чёрт, кроме 0 и 1, значения в массив писаться не будут.

  • Like 2

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


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

Вырезано с гтрп, видел систему эту, молодец.

Авторы не те...

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


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

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

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

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

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

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

Войти

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

Войти
Авторизация  

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

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

×

Важная информация

Мы разместили cookie-файлы на ваше устройство, чтобы помочь сделать этот сайт лучше. Вы можете изменить свои настройки cookie-файлов, или продолжить без изменения настроек.