Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Защите от SQL инъекций в приложении  [new]
Вася с Озерска
Guest
Всем привет !

Помогите пожалуйста разобраться c задачей о защите от SQL инъекций
в приложении настольном.

Как делать фильтрацию правильно?

База MS SQL Server 2008.
12 дек 12, 09:00    [13616704]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
aleks2
Guest
Не исполняйте данные переданные с приложения. И будет вам щастье.

Или короче, не пользуйся динамическим exec('фсяка фигня').
12 дек 12, 09:15    [13616763]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
Вася с Озерска
Guest
aleks2
Не исполняйте данные переданные с приложения. И будет вам щастье.

Или короче, не пользуйся динамическим exec('фсяка фигня').


тут советуют юзать процедуру sp_executesql
12 дек 12, 09:18    [13616773]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Вася с Озерска
тут советуют юзать процедуру sp_executesql

Правильно советуют. Только эту процедуру надо правильно использовать. Если неправильно использовать, то она не спасёт от инъекций. Давайте лучше какой-нибудь пример использования динамического SQL в вашей программе, покажем пример возможной инъекции и подскажем, как от неё защититься.
12 дек 12, 10:10    [13617015]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
Вася с Озерска
Guest
Гость333
Вася с Озерска
тут советуют юзать процедуру sp_executesql

Правильно советуют. Только эту процедуру надо правильно использовать. Если неправильно использовать, то она не спасёт от инъекций. Давайте лучше какой-нибудь пример использования динамического SQL в вашей программе, покажем пример возможной инъекции и подскажем, как от неё защититься.



Перед тем как в таблицу положить текстовые данные их же надо как то фильтровать.
12 дек 12, 10:33    [13617188]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
aleks2
Guest
Вася с Озерска
Перед тем как в таблицу положить текстовые данные их же надо как то фильтровать.

Данные не кусаются. Чо их фильтровать?
12 дек 12, 10:37    [13617209]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
Вася с Озерска
Guest
aleks2
Вася с Озерска
Перед тем как в таблицу положить текстовые данные их же надо как то фильтровать.

Данные не кусаются. Чо их фильтровать?


Вдруг там команда Drop будет это же текст. Понятно что не кусаются.
12 дек 12, 10:39    [13617221]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
Glory
Member

Откуда:
Сообщений: 104751
Вася с Озерска
Вдруг там команда Drop будет это же текст. Понятно что не кусаются.

И что ?

declare @x varchar(100)
set @x='AAAA;DROP TABLE mytable'

IF @x is NOT NULL
SELECT * FROM tab1 WHERE f1=@x
12 дек 12, 10:42    [13617238]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
aleks2
Guest
Вася с Озерска
aleks2
пропущено...

Данные не кусаются. Чо их фильтровать?


Вдруг там команда Drop будет это же текст. Понятно что не кусаются.

Ну и чо? Там даже надпись "Вася - дурак" может быть.
Это же не повод.

ЗЫ. Тибе ж сказали: НЕ ИСПОЛНЯЙ ДАННЫЕ.
12 дек 12, 10:42    [13617240]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
Вася с Озерска
Guest
Glory
Вася с Озерска
Вдруг там команда Drop будет это же текст. Понятно что не кусаются.

И что ?

declare @x varchar(100)
set @x='AAAA;DROP TABLE mytable'

IF @x is NOT NULL
SELECT * FROM tab1 WHERE f1=@x


а если вот так будет? Тогда что? А если во входных параметрах и кавычки будут ? Тогда что ?

declare @x varchar(100)
set @x='AAAA';DROP TABLE mytable'

IF @x is NOT NULL
SELECT * FROM tab1 WHERE f1=@x[/quot]
12 дек 12, 10:48    [13617273]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
Glory
Member

Откуда:
Сообщений: 104751
Вася с Озерска
а если вот так будет? Тогда что? А если во входных параметрах и кавычки будут ? Тогда что ?

Да ничего не будет. Хоть сто тыщ кавычек
12 дек 12, 10:49    [13617288]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
Вася с Озерска
Guest
Glory
Вася с Озерска
а если вот так будет? Тогда что? А если во входных параметрах и кавычки будут ? Тогда что ?

Да ничего не будет. Хоть сто тыщ кавычек


Что на это скажите?

SELECT id_news, news_date, news_caption, news_text, news_id_author FROM news
WHERE news_caption LIKE('%Test%')

Но, внедрив в параметр search_text символ кавычки (который используется в запросе), мы можем кардинально изменить поведение
SQL-запроса. Например, передав в качестве параметра search_text значение ')+and+(news_id_author='1, мы вызовем к выполнению
запрос:

SELECT id_news, news_date, news_caption, news_text, news_id_author FROM news
WHERE news_caption LIKE('%') AND (news_id_author='1%')
12 дек 12, 10:57    [13617365]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
Glory
Member

Откуда:
Сообщений: 104751
Вася с Озерска
Но, внедрив в параметр search_text символ кавычки (который используется в запросе), мы можем кардинально изменить поведение
SQL-запроса. Например, передав в качестве параметра search_text значение ')+and+(news_id_author='1, мы вызовем к выполнению
запрос:

Да что вы говорите ?
declare @x varchar(100)

set @x = 'syscolumns'
select * from sysobjects where name = @x

set @x = 'syscolumns or id = -105'
select * from sysobjects where name = @x
12 дек 12, 11:02    [13617408]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
Вася с Озерска
Guest
Glory
Вася с Озерска
Но, внедрив в параметр search_text символ кавычки (который используется в запросе), мы можем кардинально изменить поведение
SQL-запроса. Например, передав в качестве параметра search_text значение ')+and+(news_id_author='1, мы вызовем к выполнению
запрос:

Да что вы говорите ?
declare @x varchar(100)

set @x = 'syscolumns'
select * from sysobjects where name = @x

set @x = 'syscolumns or id = -105'
select * from sysobjects where name = @x


В LIKE можно вставить причем легко. Как от этого правильно защититься? Не хочется велосипед изобретать.
12 дек 12, 11:16    [13617537]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
Glory
Member

Откуда:
Сообщений: 104751
Вася с Озерска
В LIKE можно вставить причем легко. Как от этого правильно защититься? Не хочется велосипед изобретать.

Вот еще один упрямый
Приведите работающий код с "легко". А не ваши фантазии

declare @x varchar(100)
set @x = 'syscolumns'
select * from sysobjects where name LIKE @x

set @x = 'syscolumns'' or id = -105'
select * from sysobjects where name LIKE @x
12 дек 12, 11:21    [13617575]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
Вася с Озерска
Guest
Взято с википедии Внедрение SQL-кода

http://ru.wikipedia.org/wiki/%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5_SQL-%D0%BA%D0%BE%D0%B4%D0%B0
12 дек 12, 11:23    [13617601]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Вася с Озерска
Взято с википедии Внедрение SQL-кода

http://ru.wikipedia.org/wiki/%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5_SQL-%D0%BA%D0%BE%D0%B4%D0%B0

Вы путаете сборку SQL-запроса на клиенте с использованием переменных в Transact-SQL.
12 дек 12, 11:26    [13617637]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
Glory
Member

Откуда:
Сообщений: 104751
Вася с Озерска
Взято с википедии Внедрение SQL-кода

http://ru.wikipedia.org/wiki/%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5_SQL-%D0%BA%D0%BE%D0%B4%D0%B0

А вы читаете код, который вам предлагают ?
Разницу между динамическим и не-динамическим запросом понимаете ?
12 дек 12, 11:27    [13617640]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Гость333
Вася с Озерска
Взято с википедии Внедрение SQL-кода

http://ru.wikipedia.org/wiki/%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5_SQL-%D0%BA%D0%BE%D0%B4%D0%B0

Вы путаете сборку SQL-запроса на клиенте с использованием переменных в Transact-SQL.

Коряво получилось, сформулирую так:

Вы путаете две вещи: 1) сборку текста SQL-запроса на клиенте и 2) SQL-запросы с использованием переменных Transact-SQL.
12 дек 12, 11:28    [13617656]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
Вася с Озерска
Guest
Glory
Вася с Озерска
Взято с википедии Внедрение SQL-кода

http://ru.wikipedia.org/wiki/%D0%92%D0%BD%D0%B5%D0%B4%D1%80%D0%B5%D0%BD%D0%B8%D0%B5_SQL-%D0%BA%D0%BE%D0%B4%D0%B0

А вы читаете код, который вам предлагают ?
Разницу между динамическим и не-динамическим запросом понимаете ?


Данные динамически собираются на клиенте и передаются на сервер.
Я же написал что в сборка запроса идет на настольном приложении в начале топега .
12 дек 12, 11:31    [13617680]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Вася с Озерска
Данные динамически собираются на клиенте и передаются на сервер.
Я же написал что в сборка запроса идет на настольном приложении в начале топега .
Параметры? Нет не слышал.
12 дек 12, 11:33    [13617700]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
Glory
Member

Откуда:
Сообщений: 104751
Вася с Озерска
Данные динамически собираются на клиенте и передаются на сервер.
Я же написал что в сборка запроса идет на настольном приложении в начале топега .

Ну так вам и написали про динамические запросы
И про sp_executesql
12 дек 12, 11:35    [13617717]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
super-code
Member

Откуда:
Сообщений: 244
Вася с Озерска, если по простому: нужно использовать параметры, или какую нибудь ORM на клиентском приложении. SQL-инъекции не имеют отношения к серверу, а имеют отношения к клиенту, поэтому тут не много ценной информации, обратитесь в раздел форума по своему языку разработки. Так как клиент может собрать неверный запрос по данным и отправить его на сервер, сервер лишь выполняет запросы (там инъекции невозможны). Если нет возможности использовать параметры или ORM (довольно странная ситуация), то необходимо заменять все кавычки в строках, которые приходят, как данные и другие спец. символы.
12 дек 12, 13:26    [13618749]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
Гость333
Member

Откуда:
Сообщений: 3683
super-code
SQL-инъекции не имеют отношения к серверу, а имеют отношения к клиенту, поэтому тут не много ценной информации, обратитесь в раздел форума по своему языку разработки.

Не-не-не, Дэвид Блейн, от инъекций нужно защищаться именно на уровне SQL Server.

Как по-вашему, следующий пример имеет отношение к серверу или клиенту?

create procedure dbo.injection (@where nvarchar(1000))
as
    exec(N'select * from sys.objects where ' + @where);
go
exec dbo.injection N' 1=1; drop database VeryImportantDB;'
go
12 дек 12, 13:45    [13618928]     Ответить | Цитировать Сообщить модератору
 Re: Защите от SQL инъекций в приложении  [new]
Glory
Member

Откуда:
Сообщений: 104751
Гость333
Не-не-не, Дэвид Блейн, от инъекций нужно защищаться именно на уровне SQL Server.

Только у автора темы нет ни одного серверного объекта с программным кодом.
12 дек 12, 13:53    [13619014]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить