Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   mssql и sql-inj Как защитить?! (https://forum.antichat.xyz/showthread.php?t=70819)

EST a1ien 19.05.2008 18:54

mssql и sql-inj Как защитить?!
 
Наверно после прочтения заголовка у вас сложилось впечатление, что я тупой и не пользуюсь поиском. Но я скажу чесно искал НО есть одно но.
Обрабатывать переменные которые идут в запрос функцией 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

Спасибо большое. В жизне не подумал бы о том чтобы экранировать кавычку надо перед ней поставить еще одну.
Просто зачет мелкомягким.


Время: 14:16