Иконка ресурса

Client Name Fixer 1.1

Сообщения
363
Реакции
216
Лично у меня на серверах не работает новая версия плагина (Сервера cs:go). Ничего просто не изменяет людям. Сам какие либо символы пытался делать в нике, всё равно ничего не меняется
 

LEII4A

Участник
Сообщения
741
Реакции
135
Игра ксс, зашел чел с тремя вопросительными знаками вместо ника, плагин никак не отреагировал. Модуль client в смаке отключен и поэтому его пустило. Версия последняя. Странно крч. Кстати материал админс его отказался банить (был еще и с вх) и занёс в бекап, мол подключения нет. Хотя меню же есть и игроков последних вышедших он показывает. Значит подключение есть. Ну может это и не связано с ником, не знаю.
 

DeathScore13

пирожок. пирожочек.
Сообщения
734
Реакции
403
Игра ксс, зашел чел с тремя вопросительными знаками вместо ника, плагин никак не отреагировал. Модуль client в смаке отключен и поэтому его пустило. Версия последняя. Странно крч. Кстати материал админс его отказался банить (был еще и с вх) и занёс в бекап, мол подключения нет. Хотя меню же есть и игроков последних вышедших он показывает. Значит подключение есть. Ну может это и не связано с ником, не знаю.
Как я и писал выше это заменяющий символ. Он весит 1 байт и фильтроваться не будет.
 

_wS_

Участник
Сообщения
383
Реакции
760
Плагин очищает пользовательские никнеймы от сторонних символов, которые как-либо могут сломать запрос для СУБД аля MySQL

Просто удаляя все символы, которые весят > 2 байт?) По идее можно найти что-то более логичное, есть же немало безопасных символов. И если ник опасен для sql запроса, то как-бы сразу менять ему ник - какой смысл - пусть играет с каким хочет, а перед запросом его в переменной подправим. Это если там маты и реклама и тд, что реально запрещено, тогда уже наверно есть смысл менять.

Я затестил немного такую строку для примера:
new String:s[] = "✔F\\б'`\"&▲#%";

Твоя функция в итоге оставляет это:
F\б'`"&#%

Т.е. тут опасных символов нет да?)
Знак процента, который наверно Format может сломать, обратный слеш, кавычки и тд)

Что если по такой логике пойти: Мы узнали из скольки байт состоит символ, теперь циклом проходимся по его байтам ну и проверяем этот каждый байт на запрещенный. Если встретили запрещенный, то или вырезаем символ, как ты сделал, или что более легче (как мне кажец), заменить каждый байт плохого символа точкой. У меня вот в итоге осталось:

✔F.б....▲#.

C++:
stock SafeSql(String:s[])
{
    new length = TrimString(s);
    if (length < 1) { return; }
    for (new i = 0, c, b, b_count; i < length;)
    {
        if ((b_count = GetCharBytes(s[i])) < 1) {
            b_count = 1;
        }
        
        for (b = 0; b < b_count; b++)
        {
            c = s[i + b];
            if
            (        c  < 32/*space*/ /*возможно здесь есть что-то нужное, новая строка и тд*/
                ||    c == 34/*"*/
                ||    c == 37/*%*/
                ||    c == 38/*&*/
                ||    c == 39/*'*/
                ||    c == 92/*\*/
                ||    c == 96/*`*/
            )
            {
                for (b = 0; b < b_count; b++) { s[i + b] = 46/*'.'*/; }
                break;
            }
        }
        
        i += b_count;
    }
}
 

Troyanskaya

Участник
Сообщения
442
Реакции
30
Просто удаляя все символы, которые весят > 2 байт?) По идее можно найти что-то более логичное, есть же немало безопасных символов. И если ник опасен для sql запроса, то как-бы сразу менять ему ник - какой смысл - пусть играет с каким хочет, а перед запросом его в переменной подправим. Это если там маты и реклама и тд, что реально запрещено, тогда уже наверно есть смысл менять.

Я затестил немного такую строку для примера:
new String:s[] = "✔F\\б'`\"&▲#%";

Твоя функция в итоге оставляет это:
F\б'`"&#%

Т.е. тут опасных символов нет да?)
Знак процента, который наверно Format может сломать, обратный слеш, кавычки и тд)

Что если по такой логике пойти: Мы узнали из скольки байт состоит символ, теперь циклом проходимся по его байтам ну и проверяем этот каждый байт на запрещенный. Если встретили запрещенный, то или вырезаем символ, как ты сделал, или что более легче (как мне кажец), заменить каждый байт плохого символа точкой. У меня вот в итоге осталось:

✔F.б....▲#.

C++:
stock SafeSql(String:s[])
{
    new length = TrimString(s);
    if (length < 1) { return; }
    for (new i = 0, c, b, b_count; i < length;)
    {
        if ((b_count = GetCharBytes(s[i])) < 1) {
            b_count = 1;
        }
       
        for (b = 0; b < b_count; b++)
        {
            c = s[i + b];
            if
            (        c  < 32/*space*/ /*возможно здесь есть что-то нужное, новая строка и тд*/
                ||    c == 34/*"*/
                ||    c == 37/*%*/
                ||    c == 38/*&*/
                ||    c == 39/*'*/
                ||    c == 92/*\*/
                ||    c == 96/*`*/
            )
            {
                for (b = 0; b < b_count; b++) { s[i + b] = 46/*'.'*/; }
                break;
            }
        }
       
        i += b_count;
    }
}
Подскажи пожалуйста куда вставлять код.
так же можно добавить и свои знаки?
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #46
Знак процента, который наверно Format может сломать
Он его сломает только если разработчик явно пропишет никнейм в строке формата, что исключается, ибо у всех будет статичный никнейм.
Либо заранее отформатировать, а потом ещё раз запустить (правда, вопрос будет зачем), сразу передав третьим аргументом результат прошлого формата.

обратный слеш, кавычки
Database.Escape() с этим справится уже без проблем. Изначальная цель этого плагина - убрать потенциальные проблемы, связанные с двумя различными кодировками для MySQL: utf8 и utf8mb4.
Если разработчик не использует экранизацию у себя, то тут даже мой плагин не поможет, потому что может появиться любой другой аргумент (не никнейм), который все сломает.
 

will_rock

Участник
Сообщения
1,074
Реакции
363
Оно спасает от этого?

[levelsranks.smx] [Levels Ranks Core] SaveDataPlayer - Incorrect string value: '\xD0' for column 'name' at row 1
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #51

Truyn

King of clowns
Сообщения
1,591
Реакции
749
Ещё раз. Поддержки со стороны плагина и сервера БД - недостаточно. Вменяемой поддержки всё ещё нет со стороны самого SourceMod.
Данный плагин как бы я не мучал жопу,не помогает исправить эти ошибки.
Так что вариантов не очень много.
 

will_rock

Участник
Сообщения
1,074
Реакции
363
@Коробка из под бананов, не работает плагин. Никаких ошибок не выдает, в плагин листе он есть. Но в логах спамит ошибка

[Levels Ranks Core] SaveDataPlayer - Incorrect string value: '\xD0' for column 'name' at row 1
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,914
  • Команда форума
  • Автор ресурса
  • #54
Видимо, народ не понимает разницу между мультибайтовым и обрезанным ником. ОКей, придётся пояснить.
В подобных ошибках Вы видите кол-во "символов", которые MySQL переварить не смог. Но один "символ" может быть частью какого-то другого, который мы уже и видим своим глазом вместо низкоуровневого представления.
Конкретно в случае из примера в описании плагина:
C-подобный:
L 01/28/2020 - 14:26:02: [levelsranks.smx] SQL_Callback Error (674): Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1
L 01/28/2020 - 14:26:28: [shop.smx] PlayerManager_AuthorizeClient: Incorrect string value: '\xF0\x9F\x92\x94' for column 'name' at row 1
В ошибке фигурирует четыре байта (или один символ, представленный четырьмя байтами ("символами")). Каждый байт начинается с \x всегда. И этот плагин нацелен именно на такие ситуации, когда у пользователя в нике есть символы, занимающие три и более "символа".
Ошибки вида:
[Levels Ranks Core] SaveDataPlayer - Incorrect string value: '\xD0' for column 'name' at row 1
Он не сможет исправить; символ битый, обрезанный.
Я надеюсь больше не возникнет вопросов, и я смог ясно донести суть.
 

DOVE

GLite Inc.
Сообщения
296
Реакции
54
Происходит что-то очень странное. Плагин не меняет ники, хотя запущен и ошибок не выдает.
Кодировка в таблице InnoDB - utf8mb4_unicode_ci
Ошибок в логах меньше не стало - [CHAT LOG] Query Failed: Incorrect string value: '\xF0\x9D\x90\xA7\xF0\x9D...' for column 'name' at row 1
1593290024504.png
 

cssv92/AWP Убийственный

ВКонтакте: https://vk.com/awpservermrd
Сообщения
147
Реакции
343
Происходит что-то очень странное. Плагин не меняет ники, хотя запущен и ошибок не выдает.
Кодировка в таблице InnoDB - utf8mb4_unicode_ci
Ошибок в логах меньше не стало - [CHAT LOG] Query Failed: Incorrect string value: '\xF0\x9D\x90\xA7\xF0\x9D...' for column 'name' at row 1
Ответ тут Client Name Fixer
 

September

Участник
Сообщения
5,238
Реакции
2,742
  • Команда форума
  • #58
Разве такого рода ники не должны фикситься?
"。.✿𝓑𝔂𝓪𝓴𝓪✿.
 

xstage

🏹
Сообщения
726
Реакции
754
Разве такого рода ники не должны фикситься?
"。.✿𝓑𝔂𝓪𝓴𝓪✿.
Думаю нет, т.к в описании написано, что он очищает ник от этих сторонних символов и т.к весь ник состоит из этих символов, то получается он получит ник unnamed.
 

September

Участник
Сообщения
5,238
Реакции
2,742
  • Команда форума
  • #60
Думаю нет, т.к в описании написано, что он очищает ник от этих сторонних символов и т.к весь ник состоит из этих символов, то получается он получит ник unnamed.

ну проблема в том, что у игрока ник не меняется. а из-за такого ника всплывают те самые ошибки, которые в 1 посте.
 
Сверху Снизу