1.2.x - 1.5.x Простой fix authd от падений

attachdownload

Новичок
Пользователь
27 Май 2016
5
5
3
33
Нашел решение фикса ауза без замены файлов и сейчас я с вами им поделюсь.
Замена классов для фикса мне показалась не очень оптимистичной, потому как есть разные аузы по структуре пароля (base64,md5,0x) и под версии 1.3.1- и 1.4.4+.

Я выделил за всё время две причины падения.
1. Кодировка
2. Кладут злоумышленники очень длинным логином

Решение с кодировкой уже давно известно, просто прикреплю его сюда для полноты фикса.

Поговорим о том, как же добиваются падения ауза через очень длинный логин?
Тут расчет идет на то, что будет вызвана ошибка JDBC драйвера.
При проверке логина и пароля ауз вызывает процедуру acquireuserpasswd которой передает логин.
В структуре процедуры задано, что максимальная длинна логина varchar(64) это 64 буквы.
Когда вводят логин больше 64 букв, у нас появляется ошибка и падает ауз.
Код:
GQueryPasswd:account is 545y54y5454y5454y545y454y5454y5454y545y454y5454y5445y454y5454y5454y54 , login ip is 95.72.75.78
Prepare procedure call:{call acquireuserpasswd(?,?,?)}
acquireIdPasswd exception:account=545y54y5454y5454y545y454y5454y5454y545y454y5454y5445y454y5454y5454y54
com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'name1' at row 1
		at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3556)
		at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3490)
		at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1959)
		at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2109)
		at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2648)
		at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:2077)
		at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1356)
		at com.mysql.jdbc.CallableStatement.execute(CallableStatement.java:877)
		at application.procedure.handler.execute(handler.java:197)
		at org.mono.StorageEx.acquireIdPasswd(StorageEx.java:319)
		at protocol.MatrixPasswd.Server(MatrixPasswd.java:65)
		at com.goldhuman.IO.Protocol.Rpc.Process(Unknown Source)
		at com.goldhuman.IO.Protocol.Task.run(Unknown Source)
		at com.goldhuman.Common.ThreadPool.run(Unknown Source)
		at java.lang.Thread.run(Thread.java:745)

В самой ошибке нет ничего серьзеного - тут нас просто предупреждают что логин очень длинный. Но при этом работоспособность auth падает.
Самое лаконичное решение на мой взгляд убрать эти экцепшены. И благо такое решение нашлось.

Открываем файл table.xml
Находим строчку с паролем базы.

В ней надо сменить кодировку utf8 на ascii это первую проблему решит.
И добавить &jdbcCompliantTruncation=false - отключение тормозящих ошибок.

Код:
<connection name="auth0" poolsize="3" url="jdbc:mysql://localhost:3306/названиеБазы?useUnicode=true&amp;characterEncoding=ascii&amp;jdbcCompliantTruncation=false" username="пользователь" password="вашПароль"/>
Если ставите строку целиком, то в ней надо поменять данные на свои: названиеБазы, пользователь, вашПароль.
 

Пользователи онлайн

Сейчас на форуме нет ни одного пользователя.

Последние ресурсы

Статистика форума

Темы
3.838
Сообщения
21.197
Пользователи
7.601
Новый пользователь
hkuno