powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / SQL injection. Как защититься?
6 сообщений из 6, страница 1 из 1
SQL injection. Как защититься?
    #34162635
siambestexport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мой сайт был атакован какими-то уродами. Похоже на 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
SQL injection. Как защититься?
    #34162654
ugn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ugn
Гость
Используй хранимые процедуры...
...
Рейтинг: 0 / 0
SQL injection. Как защититься?
    #34162668
siambestexport
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Используй хранимые процедуры...
Спасибо, попробую переписать. Есть еще варианты?
Удача улыбается подготовленным
...
Рейтинг: 0 / 0
SQL injection. Как защититься?
    #34162692
Elast
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не спец в данном вопросе, но тут по моему некуда injection делать, ведь от юзера никакие данные в SQL запрос не попадают. Может в чем-то другом причина?

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

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

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

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

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

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

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


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