Сообщение от
artkar
artkar said:
↑
Не понял как ты хочеш узнать число стлобцов:
Если:
Очень просто.
Дело в том, что игровой движок сперва выполняет SQL-запрос и
только после этого проверяет игровую сессию на валидность.
Я бы на месте разработчиков игры сделал с точностью до наоборот - сперва проверял нужно ли вообще делать запрос к БД, и только потом бы его делал. Но они решили иначе
В результате получаем следующую картину:
Когда запрос к БД успешно выполнен - я получаю движковую ошибку
"Ключ сессии неверный!", ведь для инъекции мне волей-неволей пришлось изменить значение uid.
Если же запрос к БД завершается ошибкой
(например при добавлении символа кавычки), я получаю HTTP ошибку с кодом 500.
Таким образом, постепенно добавляя к запросу
uid=99+union+select+null новые и новые
null через запятую, я буду получать ошибку 500 до тех пор пока количество null не станет равнымм количеству столбцов. В этом случае я должен буду получить сообщение о неверном ключе сессии.
В теории должен, на практике пока ни разу не получил...
Сообщение от
artkar
artkar said:
↑
Скорее всего точка с запятой просто удаляеться, перед подачей скуль-серверу, ибо иначе ты ею рвешь неизвестный тебе запрос, и должна возвращаться ошибка скуль - ошибка.
Хочу уточнить, что SQL-ошибок мне не возвращается в принципе, ни при каких условиях. Ошибок Apache тоже.
У меня бывает всего 4 ситуации:
1. Если переменная
uid находится в девственно неприкосновенном виде, я получаю: JSON-текст, содержащий данные из БД.
2. Если переменная
uid была изменена и SQL-запрос
был выполнен, я получаю: ошибку движка throwException("Ключ сессии неверный!");
3. Если переменная
uid была изменена и SQL-запрос
НЕ был выполнен (например добавлен символ кавычки), я получаю:
HTTP 500 Internal Server Error
4. Если переменная
uid была изменена, SQL-запрос
был выполнен, при этом он попытался вернуть всю таблицу целиком (в ней 13млн. строк), я получаю:
HTTP504 Gateway Time-out
Других ситуаций не бывает.
В идеале я хочу получить 5-тую ситуацию, когда
uid была изменена, SQL-запрос
был выполнен, и я получаю JSON-текст, с данными из запроса. Но пока не получается...
В этом и заключается
Проблема №1, описанная во втором посте данной темы.
А почему символ ; должен удаляться перед подачей в БД?
Ты думаешь разработчики сделали специальную функцию для этого?