Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / SQL injection. Как защититься? / 6 сообщений из 6, страница 1 из 1
29.11.2006, 06:53
    #34162635
siambestexport
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL injection. Как защититься?
Мой сайт был атакован какими-то уродами. Похоже на SQL injection. Как защититься?
Код следующий (ин-лайн код используется только на главной странице):


Sub Page_Load(sender As Object, e As EventArgs)
    Dim strconn1 As New OleDbConnection
strconn1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & server.mappath("db11.mdb") & ";"
Dim strSelect as String = "select top 5 * from salelive ORDER BY ProductID DESC"
Dim comm As New OLEDBCommand(strSelect, strconn1)
strconn1.Open()            
DataGrid1.DataSource = comm.ExecuteReader(CommandBehavior.CloseConnection)
DataGrid1.DataBind()
strconn1.Close()
GC.Collect()
          End Sub
                    Sub RadioButtonList1_Changed(sender As Object, e As EventArgs)
            If RadioButtonList1.SelectedItem.Value = "expensive" Then
         Dim strSelect as String = "SELECT TOP 5 * FROM salelive ORDER BY Price DESC"
Dim strconn1 As New OleDbConnection
strconn1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & server.mappath("db11.mdb") & ";"
Dim comm As New OleDbCommand(strSelect, strconn1)
strconn1.Open()            
DataGrid1.DataSource = comm.ExecuteReader(CommandBehavior.CloseConnection)
DataGrid1.DataBind()
strconn1.Close()
ElseIf RadioButtonList1.SelectedItem.Value = "cheap" Then
'Dim strSelect as String = "SELECT ProductID, Form, City, Bedrooms, Floors, Size, Price, Pic, Type  FROM salelive WHERE (Price < '50000' AND Price > '20000') ORDER BY ProductID"
Dim strSelect as String = "SELECT * FROM salelive WHERE (Price < 50000 AND Price > 20000) ORDER BY ProductID"
Dim strconn1 As New OleDbConnection
strconn1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & server.mappath("db11.mdb") & ";"
Dim comm As New OleDbCommand(strSelect, strconn1)
strconn1.Open()            
DataGrid1.DataSource = comm.ExecuteReader(CommandBehavior.CloseConnection)
DataGrid1.DataBind()
strconn1.Close()
ElseIf RadioButtonList1.SelectedItem.Value = "last" Then
Dim strSelect as String = "select top 5 * from salelive ORDER BY ProductID DESC"
Dim strconn1 As New OleDbConnection
strconn1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & server.mappath("db11.mdb") & ";"
Dim comm As New OleDbCommand(strSelect, strconn1)
strconn1.Open()            
DataGrid1.DataSource = comm.ExecuteReader(CommandBehavior.CloseConnection)
DataGrid1.DataBind()
strconn1.Close()
End If
GC.Collect()
End Sub   



Удача улыбается подготовленным
...
Рейтинг: 0 / 0
29.11.2006, 07:35
    #34162654
ugn
ugn
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL injection. Как защититься?
Используй хранимые процедуры...
...
Рейтинг: 0 / 0
29.11.2006, 07:52
    #34162668
siambestexport
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL injection. Как защититься?
Используй хранимые процедуры...
Спасибо, попробую переписать. Есть еще варианты?
Удача улыбается подготовленным
...
Рейтинг: 0 / 0
29.11.2006, 08:18
    #34162692
Elast
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL injection. Как защититься?
Не спец в данном вопросе, но тут по моему некуда injection делать, ведь от юзера никакие данные в SQL запрос не попадают. Может в чем-то другом причина?

А вообще конечно лучше всегда использовать хранимые процедуры.
...
Рейтинг: 0 / 0
29.11.2006, 18:07
    #34165169
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL injection. Как защититься?
Данный код не имеет SQL Injection уязвимостей так как запросы не зависят от параметров принимаемых от пользователя. Возможно тебя поломали через уязвимости ОС. Убедись что у тебя установлен последний сервис-пак и все обновления.

Хранимые процедуры в данном случае ничего особого не дадут. Тем более, что у тебя база Access которая их не поддерживает.

Обрати внимание, что раз твоя база лежит в каталогах веб-сервера ее можно скачать прямым веб-запросом вида http://сайт/db11.mdb. Мне это сделать получилось. Советую переместить mdb файл каталог который недоступен для запросов по http.

И пара советов по коду. 1) Нет нужды формировать каждый раз строку соединения. Это можно сделать один раз или вообше хранить в виде константы. 2) Не надо явно вызывать сборщик мусора (GC.Collect). Система сама разберется когда этим заниматься.
...
Рейтинг: 0 / 0
30.11.2006, 05:16
    #34165782
siambestexport
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
SQL injection. Как защититься?
Данный код не имеет SQL Injection уязвимостей так как запросы не зависят от параметров принимаемых от пользователя. Возможно тебя поломали через уязвимости ОС. Убедись что у тебя установлен последний сервис-пак и все обновления.

Хранимые процедуры в данном случае ничего особого не дадут. Тем более, что у тебя база Access которая их не поддерживает.

Обрати внимание, что раз твоя база лежит в каталогах веб-сервера ее можно скачать прямым веб-запросом вида http://сайт/db11.mdb. Мне это сделать получилось. Советую переместить mdb файл каталог который недоступен для запросов по http.

И пара советов по коду. 1) Нет нужды формировать каждый раз строку соединения. Это можно сделать один раз или вообше хранить в виде константы. 2) Не надо явно вызывать сборщик мусора (GC.Collect). Система сама разберется когда этим заниматься.
Спасибо за дельные советы, действительно толковые подсказки. Этот код писался довольно давно. Сейчас строки соединения храню в веб.конфиг. Насчет переместить базу - попробую, идея хорошая. Насчет сборшика понял. Спасибо еще раз.
Удача улыбается подготовленным
...
Рейтинг: 0 / 0
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / SQL injection. Как защититься? / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]