Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!: Доступ к полномочиям администратора через пароль - Форум Pawn-Wiki.Ru - Воплоти мечту в реальность!

Перейти к содержимому

  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Scr ][ GF ]
Доступ к полномочиям администратора через пароль
Оценка: ***** 2 Голосов

#1
Пользователь офлайн   Cliffka 

  • Cliff Hangles
  • Вставить ник
  • Раскрыть информацию
Добрый вечер, уважаемые зрители-форумчане. Возможно, у Вас бывали случаи, что аккаунт Вашего подопечного администратора взламывали. Ну и, соответственно завладевали большей частью сервера. А может в Вашем моде есть дыры, но Вы не знаете где они и как их залатать? Мое решение Вам поможет. Итак, приступим.

Первое. Добавьте этот код в конец мода
stock GeneratePassword(size) {
    new
        bigletters[26][] = {"A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"},
        smallletters[26][] = {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"},
        numbers[10][] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"},
        password[128];
    if(size > sizeof(password)) size = sizeof(password);
    for(new i = 0; i < size; i ++) {
        switch(random(3)) {
            case 0: {
                strcat(password, bigletters[random(sizeof(bigletters))]);
            }
            case 1: {
                strcat(password, smallletters[random(sizeof(smallletters))]);
            }
            case 2: {
                strcat(password, numbers[random(sizeof(numbers))]);
            }
        }
    }
    return password;
}


Добавили? Скомпилируйте и проверьте - может у Вы сделали что-либо неправильно. Все гладко? Продолжаем!

Второе: добавьте в enum pInfo
pAdminKey[10],

затем ко всем new
new AdminLogin[MAX_PLAYERS];


А также сразу же настроим сохранение аккаунта (примечание: я делаю строго для mxINI. Если у Вас другая файловая система или же MySQL - пишите в ПМ)
iniGet(File,"AdminKey",PlayerInfo[playerid][pAdminKey]);


Это надо в OnPlayerLogin.
iniSet(File,"AdminKey",PlayerInfo[playerid][pAdminKey]
);

Это в SaveAccount.
iniSet(File,"AdminKey","qwerty");

Это в Register.

Итак. Третий шаг: добавьте в команду "/makeadmin" - выдача админки легальным путем.
strmid(PlayerInfo[playerid][pAdminKey],GeneratePassword(8),0,
8,255);
format(string, sizeof(string), "Ваш новый код для админ панели: %s", PlayerInfo[playerid][pAdminKey]);
SendClientMessage(para1, COLOR_LIGHTBLUE, string);
SendClientMessage(para1, COLOR_LIGHTBLUE, "Ни в коем случае не забывайте его!");


Во все команды администратора добавьте:

if(AdminLogin[playerid] != 1) return SendClientMessage(playerid, COLOR_LIGHTBLUE, "Залогиньтесь в панели администратора (/liap)");


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

И ко всем диалогам:
	if(dialogid == 16726)
 	{
 	    if(response)
 	    {
			if(!strlen(inputtext)) return 1;
			if(strcmp(inputtext, PlayerInfo[playerid][pAdminKey], true)==0)
			{
			    SendClientMessage(playerid,COLOR_FADE1,"Вы успешно залогинились в системе. Удачного дня!");
			    AdminLogin[playerid] = 1;
			}
			else
			{
			    	SendClientMessage(playerid,COLOR_FADE1,"Вы ввели неверный пароль! Администрация оповещена.");
			    	format(string,sizeof(string),"%s ввел неверный пароль при логиннинге в адм-панель.",GPN(playerid));
			    	SendAdminMessage(0x10F441AA, string);
			}
 	    }
 	}


Последний шаг не выполняйте если Вы уверены, что в Вашем моде нет дыр. Если есть, то:
в OnPlayerUpdate(playerid)
if(PlayerInfo[playerid][pAdmin]>0 && AdminLogin[playerid]==0 && strcmp(PlayerInfo[playerid][pAdminKey], "qwerty", true) != 0) return SendMes(playerid, COLOR_RED, "%s забанен за попытку взлома админки.",GPN(playerid)),Ban(playerid);


Вроде это все :) Спасибо за просмотр. Плюсы ставить справа снизу поста :D
Примечание: (SendMes и GPN - мои функции. В урок включать их не стал. По ошибкам, связанных с ними, пишите в ПМ)

Сообщение отредактировал Cliffka: 25 Июль 2012 - 19:03

12

#2
Пользователь офлайн   Romzes 

  • © Pawn-Wiki.Ru
  • Вставить ник
  • Раскрыть информацию
+ дал так как такого готового решения еще не было и может оно кому то пригодиться.
0

#3
Пользователь офлайн   Smiley1361 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
классно!

проверил, работает :D

Сообщение отредактировал Smiley1361: 25 Июль 2012 - 19:34

0

#4
Пользователь офлайн   LiMOH 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию
Очень полезная вещь, плюс явно заслужил.
0

#5
Пользователь офлайн   Fasters 

  • Fuck Yeah
  • Вставить ник
  • Раскрыть информацию
Молодцом ,у меня такое тоже стоит ,только после ввода ключа доступа пользователь может зайти как администратор :)
0

#6
Пользователь офлайн   Vinsante 

  • Местный
  • Вставить ник
  • Раскрыть информацию
Я дебил и поэтому у меня были некоторые проблемы при внедрении этой системы. (Ну просто даже при использовании /makeadmin админский ключ оставался qwerty- поэтому прямо в /makeadmin мне пришлось запихнуть запись в ini файл).

Но это чисто мой косяк походу. А так система очень понравилась,работает на ура...поставлю плюсик
0

#7
Пользователь офлайн   Ilyha_Stach 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
По моему вырезано с Engine RP и переправлено на mx_INI... Если не ошибаюсь
0

#8
Пользователь офлайн   Cliffka 

  • Cliff Hangles
  • Вставить ник
  • Раскрыть информацию
Ошибаешься :) Сам писал.
0

#9
Пользователь офлайн   Ilyha_Stach 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Просто stock GeneratePassword(size) один в один как на Engine RP
0

#10
Пользователь офлайн   Cliffka 

  • Cliff Hangles
  • Вставить ник
  • Раскрыть информацию
Да. Единственное, что я взял оттуда.
0

Поделиться темой:


  • (2 Страниц) +
  • 1
  • 2
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей