2015-08-25 3 views
0

Мы используем 3-уровневую архитектуру в ASP.Net.SQL Injection on Views

Есть 3 слоя

  1. презентации
  2. Бизнес
  3. Доступ к данным

уровня доступа к данным и т.д. содержит функцию GetData и ExecuteQuery. Что я хочу знать, так это то, что вы хотите вызвать View непосредственно из уровня презентации. Есть ли вероятность внедрения SQL при вызове представления из front-end без использования хранимой процедуры?

Presentation Layer (C#)

protected void btnView_Click(object sender, EventArgs e) 
     { 
      DL obj = new DL(); 
      DataTable tb = new DataTable(); 
      string query = "select * from ViewTeacher where FID = " + txtName.Text; 

      tb = obj.GetData(query); 

     } 

DBAccess

public DataTable GetData(string query) 
     { 
      DataTable datatable = new DataTable(); 
      SqlCommand cmd = new SqlCommand(); 
      cmd.Connection = con; 
      cmd.CommandText = query; 

      try 
      { 
       if (cmd.Connection.State != ConnectionState.Open) 
       { 
        cmd.Connection.Open(); 
       } 
       using (SqlDataAdapter da = new SqlDataAdapter(cmd)) 
       { 
        da.Fill(datatable); 
       } 
      } 
      catch (Exception ex) 
      { 

       throw new ArgumentException(ex.Message); 
      } 
      return datatable; 
     } 
+0

Можете ли вы предоставить какой-то код, так как вы его называете (прочитайте функцию), где он может пойти не так. – Dorvalla

+0

@Dorvalla., Конечно, позвольте мне отредактировать –

+0

, вы можете вызвать представление непосредственно из уровня представления, и у него может быть проблема с sql-инъекцией, основанная на том, как вы его вызываете и, следовательно, по просьбе Dorvalla, если вы предоставляете код, который используете для вызова мы можем предположить, что код вызывает проблему с sql-атакой или нет? –

ответ

1

Как вы "называя вид"? Если вы работаете одноранговой запрос на:

SELECT <columns> FROM View WHERE ColumnX = 'Y' 

и если этот запрос строится с использованием (потенциально) враждебное вход, то да, конечно, что может быть предметом SQL инъекции - все точки инъекции является то, что злоумышленник может изменить характер запроса:

SELECT <columns> FROM View WHERE ColumnX = 'Z' 
UNION ALL 
SELECT name,0,0,0,0 FROM INFORMATION_SCHEMA.TABLES --' 

атакующий не ограничивается только объекты, которые присутствуют в исходном запросе.


подозрительный вход в двух вышеуказанных запросов было:

Y 

и

Z' 
UNION ALL 
SELECT name,0,0,0,0 FROM INFORMATION_SCHEMA.TABLES -- 
+0

большое спасибо –

0

Там не должно быть никаких шансов SQL Injection при вызове вид с переднего конца, как представления не принимайте параметры.
ссылка: can we pass parameter to a view in sql?

+0

Если в приложении есть запрограммированный запрос для доступа к представлению, то это не подлежит инъекции - но это потому, что его жестко запрограммированный запрос не потому, что его запрос вид.Я не знаю ни одного API, который просто берет имя представления и возвращает все строки из него (и не уверен в полезности такого API) - в большинстве API, о которых я знаю, вам нужно будет предоставить полный * запрос *, который обращается (и фильтрует) представление. Если это не жестко закодировано, то это как предмет для инъекций, как и все остальное. –

+0

Я видел вопрос до редактирования только. В соответствии с моим пониманием вопроса я предоставил решение. – Biswabid

+0

thanku @Biswabid –

1

Как вы пишете запрос следующим образом, что принимает значение из текстового поля, 100% есть возможность вешать для SQL инъекций.

string query = "select * from ViewTeacher where FID = " + txtName.Text; 
+0

спасибо Рамеша за ответ –