Гость stibs

Защита аккаунта игрока - Google Authenticator

В теме 6 сообщений

Переходим к заключению циклу уроков,

посвященных защите аккаунта игрока. Это третий финальный урок. И мы начинаем. 

Сегодня будем защищать аккаунт игрока с помощью еще одного нехитрого способа - Google Authenticator. Данная штука генерирует временный пароль, в кодировке BASE32. Соответственно даже если злоумышленник будет знать основной пароль от вашего аккаунта, временный он уже НИКАК не получит. 

Приступаем к самой сути. 

Скачиваем эту папку (плагин с инклудом):

TOTP-plugin-1.0.0.zip

В ней есть версия плагина под windows и linux, также содержится инклуд. 

А теперь переходим к коду:
Ко всем #include / в начало мода:

#include <TOTP>

Ну и теперь для примера создадим команду, которая будет генерировать код в base32 (все заглавные английские буквы от A до Z и цифры от 2 до 7), после чего пользователь введет данный код в приложение Google Authenticator и ему выдаст второй код, который он должен будет ввести уже в диалог собственно. 

В начало мода:
 

new code[17];

Ко всем командам (zcmd / dc_cmd) (если уберете шапку команды, то можно куда угодно :))

CMD:secretcode(playerid)
{
    new base_encoding[32][] =
    {
        "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","2", "3", "4", "5", "6", "7"
    }
    ;
    for(new i; i < 17; i++) strcat(code, base_encoding[random(sizeof(base_encoding))]); // генерируем наш код в кодировке BASE32
    SendClientMessage(playerid, -1, "Введите код, который сейчас появится на экране в приложение Google Authenticator, а затем введите в поле для ввода код, которое вам выдало приложение");
    static const fmt_str[] = "{BEBEBE}Код, который необходимо ввести в приложение GoogleAuthenticator: {FFFFFF}%s\n{BEBEBE}Введите код, который выдало приложение:";
    new str[sizeof(fmt_str)+ (-2+sizeof(base_encoding))];
    format(str, sizeof(str), fmt_str, code); // форматируем строку
    ShowPlayerDialog(playerid, 1302, DIALOG_STYLE_INPUT, "Подтверждение Гугл Аутентификатор", str, "Ввести", "Отмена");
    return true;
}

Далее напишем действие для нашего диалога:
 

if(dialogid == 1302)
{
    if(!strlen(inputtext)) return Kick(playerid); // ничего не ввел
    new codegoogle = GoogleAuthenticatorCode(code, gettime()); //получаем код от гугл (из цифр)
    if(strval(inputtext) != codegoogle) return Ban(playerid); // ввел неверно код, баним IPшник
    SendClientMessage(playerid, -1, "Код введен верно, вход на сервер разрешен!"); // если все норм
    SpawnPlayer(playerid); // спавним игрока или что вам там надо делаем тут
}

Ну и в принципе все. 

Автор данного кода и текста: @stibs

Автор идеи: Games. 

Автор плагина: Games. 

При копировании на другие ресурсы обязательно указывайте авторство и ссылку на источник. Если локальные правила форума не позволяют выкладывать ссылки на посторонние ресурсы, тогда материал к публикации запрещается.

 

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


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

Куда кидать это?:

if(dialogid == 1302)
{
    if(!strlen(inputtext)) return Kick(playerid); // ничего не ввел
    new codegoogle = GoogleAuthenticatorCode(code, gettime()); //получаем код от гугл (из цифр)
    if(strval(inputtext) != codegoogle) return Ban(playerid); // ввел неверно код, баним IPшник
    SendClientMessage(playerid, -1, "Код введен верно, вход на сервер разрешен!"); // если все норм
    SpawnPlayer(playerid); // спавним игрока или что вам там надо делаем тут
}

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


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

@Дима Нисанский, в OnDialogResponse.

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


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

Поправьте: 

DIALOG_STLYE_INPUT
ShowPlayerDialog(playerid, 1302, DIALOG_STYLE_INPUT, "Подтверждение Гугл Аутентификатор", str, "Ввести", "Отмена");

 

Ошибку выдаёт:

error 001: expected token: ",", but found ";"

Строка:

for(new i; i < 17; i++) strcat(googlecode, base_encoding[random(sizeof(base_encoding))]; 

 

Заметка от DEST , создано

Поправил, спасибо.

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


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

@Zishka,

for(new i; i < 17; i++) strcat(googlecode, base_encoding[random(sizeof(base_encoding))]); 

 

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


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

Как активировать?

 

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


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

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

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

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

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


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

Войти

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


Войти

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

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

  • Похожий контент

    • benz123
      От benz123
      Добрейшего дня форумчане. Вообщем вчера писал код для новогодних квестов на основе ActorDialog. Не работает клавиша закрыть, перерыл все форумы и весь интернет. Писал знакомой гадалке, даже она не знает. Надеюсь всемогущие форумчане смогут мне помочь. Очень прошу. 
      Код : 

      Пояснение : Сервер если что копия радмира. Форум буду посещать 24/7.
      ВК: @afk2007
    • SystemDev
      От SystemDev
      Доброго времени суток, уважаемые пользователи Pawno-Rus!
      В первую очередь, хочу поздравить всех вас с наступающим новым годом и пожелать вам хорошего окончания этого года, и исполнения всех ваших желаний.
      Ну а теперь перейдём к самой теме, в которой я хочу представить вам свою доработку игрового мода Rockford RP.
      Мод был полностью протестирован моей командой и пофикшен максимум найденных нами багов. Мод был хорошо доработан и я могу с уверенностью заявить что он отлично подойдёт для основы или же под открытие с ним целого проекта!
      Что-ж, не будем много говорить и давайте перейдём к списку проделанной нами работы:
      1. Была полностью переписана система регистрации и авторизации. Более подробно вы можете взглянуть на неё на прикреплённых к теме изображениях.
      2. У домов и квартир теперь есть названия классов: Эконом, Комфорт, Комфорт+, Бизнес, Элитный
      3. Теперь  у каждого бизнеса есть иконка на карте (Их не было у продуктовых магазинов и 24/7)
      4. Были пофикшены актёры в бизнесах и актёры были добавлены в те бизнесы, в которых их не было (Не отображались)
      5. Был подключен и хорошо настроен античит Nex-AC, так-же у администрации теперь есть лист читеров в виде текстдрава в левом нижнем углу
      6. Был удалён весь лишний маппинг с улиц и пляжей, а так-же весь оставшийся маппинг был перенесён в модули
      7. Все текстравы были перенесены в модуль
      8. Проработаны начальные квесты
      9. Теперь у домов есть 3д текст на въезде в гараж и на выходе из гаража
      10. Меню дома теперь можно открыть нажав в доме "F"
      11. Теперь перед покупкой дома, можно взглянуть на него изнутри и уже после этого купить его нажав кнопку "F" в доме
      12. Теперь если нет медиков в игре, то мед.карту можно получить в регистратуре любой из больниц
      13. Пофикшен навигатор (Не всегда совпадали пункты)
      14. Добавлена 5 банда - The Rifa Gang
      15. Гетто теперь стало более обширным (130 квадратов)
      16. Новая система сытости и жажды (При уровне сытости и жажды ниже 20, появляются 2 иконки возле худа с деньгами игрока, их можно увидеть на одном из скриншотов)
      17. Система рулетки (Выдаётся за каждые 3 отыгранных часа. Использовать можно в /mm > Рулетка)
      18. Теперь у стрел мафий тоже есть своя табличка + киллы считаются
      19. Отредактированы и оптимизированы начальные работы (+ ЗП теперь выдаётся в случае смерти, спавна или вылета)
      20. Работа развозчика пиццы была улучшена и добавлена в /gps и в квесты
      21. Рабочий транспорт на работе газонокосильщика теперь бесплатный
      22. Теперь у всех дверей, ворот и шлагбаумов есть 3д текст с информацией как их открыть
      23. Ставка в автоматах казино ЛС теперь снимается сразу
      24. Добавлено казино ЛВ и игра в кости (5 игроков и крупье)
      25. Спавн в гетто был вырезан
      26. Теперь мафии не могут начать стрелу за бизнес, если у бизнеса нет владельца
      27. Крыша бизнеса теперь отображается
      28. Пофикшен "Online/Offline" в /leaders (Не правильно отображала)
      29. Бандам за капт теперь не даётся по 500 вирт
      30. Во время капта или стрелы участники теперь спавнятся на базе организации (Раньше спавнились в больнице с 10 ХП)
      31. Лечение в больнице теперь бесплатное (+ Лечение теперь начинается при нажатии ALT)
      32. Кокаин теперь тяжелый наркотик, а марихуанна лёгкий (Было наоборот)
      33. Убраны звуки в диалогах
      34. Метка поиска дома теперь удаляется
      35. При включении/выключении акций администрацией теперь всех уведомляет и автоматически меняется название сервера (Пример: Universal RP | Акция!)
      36. Переписана /ahelp
      37. Администрация теперь может останавливать стрелу мафий за бизнес (/stopbizwar)
      38. Добавлен запрет на оружие миниган, прибор ночного видения и т.п
      39. Пофикшены все сделки по продаже/обмене имущества (Деньги выдавались наоборот или вовсе не выдавались)
      40. Новая система операций с наличными
      41. Теперь все сделки и предложения происходят по Y/N
      42. Администрация теперь прямо из игры может удалить дом или бизнес: /delbiz /delhouse
      43. Теперь нельзя использовать /invite во время капта и стрелы
      44. Пофикшен текст при /unload (не отображалось кол-во привезённых матов)
      45. Новый 3д текст складов банд и мафий
      46. Для использования часов (/time) теперь нужно купить их в магазине аксессуаров и надеть на персонажа
      47. Для использования макси (/mask) теперь нужно купить её в магазине аксессуаров и надеть на персонажа (Так-же срок действия маски теперь 10 минут)
      и еще 30+ пунктов которые сюда не влезут так что тг @qnusn ( там покажу подробно описание мода)
      Если возникли какие-либо вопросы, пишите в Telegram - @qnusn