Добрый день.
Возник вопрос, как защитить сервер от краша с помощью ввода в диалог %s и т.д.
Спасибо за ответ.
Для полного доступа ко всем функциям форума, Вам необходимо зарегистрироваться и авторизоваться.
Крашит сервер через диалоги
Лучший Ответ Elrmrnt-Kritik , 07 Май 2017 - 19:40
Vadlmok, нет... Тогда нужно ноль возвратить, если происходит ошибка (найден % в тексте) и единицу, если все успешно. А также передавать не количество символов, а саму строку.
stock anticrashdialog(inputtext[])//Поскольку мы передаем строку, inputtext принимает строковое значение, а значит нужно добавить []
{
for(new i = strlen(inputtext); i != 0; --i)
{
switch(inputtext[i])
{
case %: return false;//происходит ошибка, возвращаем ноль
default: continue;
}
}
return true;//возвращаем 1
}
И в диалоге использовать так:
if(anticrashdialog(strlen(inputtext)) == 0) return SendClientMessage(playerid, 0xFF0000FF, "Недопустимые символы найдены в вашем тексте...");
Я что-то сейчас задумался (забыл), можно ли использовать case %. Возможно, понадобятся кавычки (case '%')
Можно обойтись компромиссным вариантом:
stock anticrashdialog(inputtext[])//В сток мы передаем строку, поэтому принимает значение строковое, а значит нужно добавить []
{
if(strfind(inputtext, "%", true) >= 0) return false;//Ошибка, в строке найден знак процента
return true;//возвращаем 1, если ничего не найдено
}
И в диалоге использовать:
if(anticrashdialog(inputtext) == 0) return SendClientMessage(playerid, 0xFF0000FF, "Недопустимые символы найдены в вашем тексте...");
Коротко говоря, в первом методе мы в сток передавали строку и там при помощи цикла перебирали каждый символ. Если он сходится с %, тогда возвращали 0 (то есть ошибку). Вторым же методом мы во всей строке искали %. Опять же, если ошибка, возвращаем ноль. Не знаю какой из них со стороны оптимизации будет лучше. Я бы выбрал первый...
Перейти к сообщению »
#1
offline
Отправлено 07 Май 2017 - 13:08
offline
#3
offline
Отправлено 07 Май 2017 - 13:17
offline
Elrmrnt-Kritik, а если сделать так? Будет работать?
Сообщение отредактировал Vadlmok: 07 Май 2017 - 13:17
#4
offline
Отправлено 07 Май 2017 - 19:40
offline
Vadlmok, нет... Тогда нужно ноль возвратить, если происходит ошибка (найден % в тексте) и единицу, если все успешно. А также передавать не количество символов, а саму строку.
И в диалоге использовать так:
Я что-то сейчас задумался (забыл), можно ли использовать case %. Возможно, понадобятся кавычки (case '%')
Можно обойтись компромиссным вариантом:
И в диалоге использовать:
Коротко говоря, в первом методе мы в сток передавали строку и там при помощи цикла перебирали каждый символ. Если он сходится с %, тогда возвращали 0 (то есть ошибку). Вторым же методом мы во всей строке искали %. Опять же, если ошибка, возвращаем ноль. Не знаю какой из них со стороны оптимизации будет лучше. Я бы выбрал первый...
Сообщение отредактировал Elrmrnt-Kritik: 07 Май 2017 - 19:48
Количество пользователей, читающих эту тему: 1
0 пользователей, 0 гостей, 0 анонимных
-
Alexa (1)


Тема закрыта
Сообщений: 40
Регистрация:
Skype: v.l.a.d.65