Показать сообщение отдельно

  #7  
Старый 25.06.2017, 03:42
KAPTOHHbIu
Guest
Сообщений: n/a
Провел на форуме:
3832

Репутация: 0
По умолчанию

Цитата:
Сообщение от 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, описанная во втором посте данной темы.

А почему символ ; должен удаляться перед подачей в БД?

Ты думаешь разработчики сделали специальную функцию для этого?
 
Ответить с цитированием