Задавайте вопросы, мы ответим
Вы не зашли.
Есть один проект, в котором выполняется следующий SQL-запрос:
SELECT [...] MATCH (someFields) AGAINST ("$USERINPUT")
Где $USERINPUT — ввод пользователя, в котором все символы «(» и «)» вырезаны. Насколько это безопасно? Сможет ли злоумышленник выполнить произвольную команду SELECT, INSERT или UPDATE?
Отредактированно popoffka (02.07.2011 11:40:58)
Неактивен
Правила общие - внутри userinput все кавычки должны быть экранированы. См. статью про SQL-инъекции
Неактивен
Что кавычки сто́ит экранировать всегда — это понятно, но, в данном случае, внести изменение в код будет очень проблематично, поэтому меня интересует, насколько опасно текущее состояние и что сможет сделать потенциальный злоумышленник.
Неактивен
Чтобы на это ответить, приведите код php. В принципе сможет сделать все, что описано в статье. Вряд ли INSERT и UPDATE, но зависит от кода.
Неактивен
Объясните, а как вы себе представляете подставление вообще какого-либо запроса в этот код, если вы не можете использовать скобки и, следовательно, не можете закрыть AGAINST? Или какой-то запрос можно вставить и в сам AGAINST?
Неактивен
Прошу прощения, пропустил информацию о вырезании скобок. Формально вы правы, что нельзя закрыть скобки, если они вырезаны, но я против кустарных решений - практика показывает, что если не сделать нормально, то всегда выясняются какие-то еще особенности, которые позволяют вписать туда скобки (в каком-нибудь случае). Например, тестировался ли код, если userinput содержит символы новой строки?
Неактивен