В этой небольшой статье я расскажу вам как обезопасить токен вашего бота в дискорд от утечки вследствии возможности прочитать конфиг из других взломанных плагинов вашего сервера. Поводом для это статьи стала вот эта про безопасность. Но мне было крайне лень делать АПИ для всей этой мутотени, тем более его можно тоже ломануть. Так вот тут мы вспоминаем про то что Discordsrv это опенсурс плагин. Лично я скачал Intelij idea и поставил туда плагин Minecraft. Найти как это сделать можно в гайдах на ютубе. Подле этого скачав с github код я распаковал и нажал в папке где был Readme.md
Кстати, забыл упомянуть что если у вас не будет установлено расширение майнкрафт билдить плагин надо будет вручную(ЭТО СЛОЖНОВАТО). Слева будут находиться различные папки и пакеты.
Если у вас сверху не будет значка бумажного самолетика, а будет что-то серое, это плохо. Но я тут не делаю гайд как ставить расширения. Вся основная логика конфига находится в майн классе, его вы можете увидеть рядом с debug. Заходим в него нажав дважды. Далее CTRL + F и пишем token. Далее на скриншоте стрелочками показано где примерно будет сам токен, листаем туда.
Видите три строки, они основные в получении вашего токена. Сейчас я приведу пример как у меня и как на гитхабе
Я удалил пару проверок, в основном которые ни на что не влияют, но некоторые из них влияют на работу плагина. Это соответствие токена в переменной к токену в конфиге, что происходит в строке 13
На всякий случай кину хороший видеогайд по плагинописанию. В этом выпуске указано как установить плагин в интелидж и т.п.
Кстати, забыл упомянуть что если у вас не будет установлено расширение майнкрафт билдить плагин надо будет вручную(ЭТО СЛОЖНОВАТО). Слева будут находиться различные папки и пакеты.
Если у вас сверху не будет значка бумажного самолетика, а будет что-то серое, это плохо. Но я тут не делаю гайд как ставить расширения. Вся основная логика конфига находится в майн классе, его вы можете увидеть рядом с debug. Заходим в него нажав дважды. Далее CTRL + F и пишем token. Далее на скриншоте стрелочками показано где примерно будет сам токен, листаем туда.
Видите три строки, они основные в получении вашего токена. Сейчас я приведу пример как у меня и как на гитхабе
код метода получения токена и его фильтрации:
File tokenFile = new File(getDataFolder(), ".token");
String token;
if (StringUtils.isNotBlank(System.getProperty("DISCORDSRV_TOKEN"))) {
token = "";
DiscordSRV.debug("Using bot token supplied from JVM property DISCORDSRV_TOKEN");
} else if (StringUtils.isNotBlank(System.getenv("DISCORDSRV_TOKEN"))) {
token = "";
DiscordSRV.debug("Using bot token supplied from environment variable DISCORDSRV_TOKEN");
} else {
token = "";
DiscordSRV.debug("Using bot token supplied from config");
}
if (StringUtils.isBlank(token)) {
disablePlugin();
error("No bot token has been set in the config; a bot token is required to connect to Discord.");
invalidBotToken = true;
return;
} else if (token.length() < 59) {
disablePlugin();
error("An invalid length bot token (" + token.length() + ") has been set in the config; a valid bot token is required to connect to Discord."
+ (token.length() == 32 ? " Did you copy the \"Client Secret\" instead of the \"Bot Token\" into the config?" : ""));
invalidBotToken = true;
return;
} else {
// remove invalid characters
token = token.replaceAll("[^\\w\\d-_.]", "");
}
код метода получения токена и его фильтрации:
File tokenFile = new File(getDataFolder(), ".token");
String token;
if (StringUtils.isNotBlank(System.getProperty("DISCORDSRV_TOKEN"))) {
token = System.getProperty("DISCORDSRV_TOKEN");
DiscordSRV.debug("Using bot token supplied from JVM property DISCORDSRV_TOKEN");
} else if (StringUtils.isNotBlank(System.getenv("DISCORDSRV_TOKEN"))) {
token = System.getenv("DISCORDSRV_TOKEN");
DiscordSRV.debug("Using bot token supplied from environment variable DISCORDSRV_TOKEN");
} else if (tokenFile.exists()) {
try {
token = FileUtils.readFileToString(tokenFile, StandardCharsets.UTF_8);
DiscordSRV.debug("Using bot token supplied from " + tokenFile.getPath());
} catch (IOException e) {
error(".token file could not be read: " + e.getMessage());
token = null;
}
} else {
token = config.getString("BotToken");
DiscordSRV.debug("Using bot token supplied from config");
}
if (StringUtils.isBlank(token) || "BOTTOKEN".equalsIgnoreCase(token)) {
disablePlugin();
error("No bot token has been set in the config; a bot token is required to connect to Discord.");
invalidBotToken = true;
return;
} else if (token.length() < 59) {
disablePlugin();
error("An invalid length bot token (" + token.length() + ") has been set in the config; a valid bot token is required to connect to Discord."
+ (token.length() == 32 ? " Did you copy the \"Client Secret\" instead of the \"Bot Token\" into the config?" : ""));
invalidBotToken = true;
return;
} else {
// remove invalid characters
token = token.replaceAll("[^\\w\\d-_.]", "");
}
if (StringUtils.isBlank(token) || "BOTTOKEN".equalsIgnoreCase(token)) {
Потом по гайду в интернете вы создаете артефакты для компиляции плагина а нажав сверху на Build и там Build artifacts выбираете лично ваш. Он будет в папке исходного кода\DiscordSRV-master\out\artifacts\Имя артефакта\файл.jar. На этом все, обязательно сделайте резервную копию сервера перед этим. Если вы копируете мой код, пожалуйста, вставьте токен в двойных кавычках. Из-за вставки на сайт часть кода могла измениться, по сравнению с моим, но вы все можете лицезреть на скриншоте.На всякий случай кину хороший видеогайд по плагинописанию. В этом выпуске указано как установить плагин в интелидж и т.п.
Последнее редактирование: