Просмотр полной версии : mssql и sql-inj Как защитить?!
EST a1ien
19.05.2008, 18:54
Наверно после прочтения заголовка у вас сложилось впечатление, что я тупой и не пользуюсь поиском. Но я скажу чесно искал НО есть одно но.
Обрабатывать переменные которые идут в запрос функцией addslashes() не катит.
Дело в том что даже если к MS SQL идет вот такой запрос.
SELECT * FROM some_table where name='test\''
Он всеравно жалуется на незакрытую кавычку.
-=lebed=-
19.05.2008, 19:14
почитай https://forum.antichat.ru/thread58597.html и всё станет ясно...
EST a1ien
19.05.2008, 19:23
Причем здесь magic_quotes_gpc.
Ты непонял вопроса.
Даже при Экранирование кавычки MS SQL выдает ошибку.
Могу даже показать что он пишет.
UPD
SELECT * FROM table WHERE account='test\''
Msg 105, Level 15, State 1, Line 1
Unclosed quotation mark after the character string 'test\''.
Msg 102, Level 15, State 1, Line 1
Incorrect syntax near 'test\''.
Вот что сервер отвечает. и ему наплевать из PHP идет конект или напрямую через Server Manager.
-=lebed=-
19.05.2008, 19:51
А.. ты про MSSQL, глянь тут http://vingrad.ru/blogs/sabrog/2007/12/29/sql-injection-kak-to-vse-neodnoznachno/ тогда...
В общем двойной зачот.
Недавно правил один из своих сайтиков. Движок был заточен под MySQL и прекрасно с ним работал. Но этот проект пришлось поднимать на MSSQL. Долго извращаясь, у меня это все-таки получилось. Синтаксис неповторимый.
На днях поступила жалоба, что при попытке написать сообщение вываливается ошибка драйвера БД. При ближайшем рассмотрении выяснилось, что не экранируются кавычки. Смешно? Идем дальше. Экранирование кавычек у меня всегда было. А тут нет. Странно. Вспомнить почему именно так я не смог. Причина оказалась смешной. В модуле MSSQL для PHP нет функции аналогичной mysql_escape_string(). УЖОС.
Первое, что пришло на ум, использовать функцию mysql_escape_string(). Но не тут-то было. Проблема осталась, хотя экранирование работало. Помог опыт программирования на VB. Кавычка экранируется ее повторением. Т.е. чтобы кавычка попала внутрь строки, перед ней надо поставить не \, а просто повторить ее. Ржунимагу. Ну как так можно?
Отдельный зачот MS и разработчикам PHP.
Ссылка, которая меня сегодня еще немного порадовала http://nuclight.livejournal.com/107170.html.
http://gorinich.net/posts/4
EST a1ien
19.05.2008, 20:31
Спасибо большое. В жизне не подумал бы о том чтобы экранировать кавычку надо перед ней поставить еще одну.
Просто зачет мелкомягким.
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot