2011-12-08 3 views
2

내가 내 ASP 페이지에서 검색 기능을 가지고 내 쿼리를 선택한다고 생각 VS2005의 C#을 ASP.NET 및 SQL Server 2005방지 SQL 주입

을 사용하고하는 것은 SQL에 취약 주입.

이 내 현재 SELECT 성명 : searchTB 내 검색 텍스트 상자가

string LoggedInUser = (User.Identity.Name); 

SqlDataSource1.SelectCommand = "SELECT * FROM [TABLE1] where [" + DropDownList1.Text + "] like '%" + searchTB.Text + "%' AND [empUser] LIKE '%"+LoggedInUser+"%'"; 
SqlDataSource1.DataBind(); 

*입니다; DropDownList1 내 검색 카테고리입니다; LoggedInUser은 로그인 한 사용자의 사용자 이름입니다.


INSERT 문 중 하나의 매개 변수 대신 연결을 구현 한 :

string sql = string.Format("INSERT INTO [TABLE2] (Username) VALUES (@Username)"); 
     SqlCommand cmd = new SqlCommand(sql, conn); 
     cmd.Parameters.AddWithValue("Username", usernameTB.Text); 
conn.Open(); 
cmd.ExecuteNonQuery(); 
conn.Close(); 

내가 변경하려면 내 INSERT 문처럼 문을 SELECT, 매개 변수를 대신 사용하십시오. 어떻게 변경해야하는지 알 수 있습니까?

+0

내 대답에 문제가 있습니까? 도움이 더 필요하십니까? – dknaack

답변

0

DataTable 개체 데이터 소스와 자신의 선택 기능이 방법을/쓸 수 있습니다.

2

데이터 sourse를 얻는 방법을 쓰기 쿼리에 대한 SQL 매개 변수를 사용하여 감사드립니다. Here 내가 UI 기능에서 데이터베이스 액세스를 분리하도록 내가 쿼리하는 방법을 사용합니다 명령 객체에

SqlCommand command = new SqlCommand(commandText, connection); 
command.Parameters.Add("@ID", SqlDbType.Int); 
command.Parameters["@ID"].Value = customerID; 

을 매개 변수를 추가하는 방법 좋은 예입니다. 또한 쿼리를 다시 사용할 수 있습니다.

1

를 사용하는 이 같은 :

switch (DropDownList1.Text) 
{ 
    case "ValidField1": 
    case "ValidField2": 
    ... 
     break; 
    default: 
     throw new ArgumentException(...); // or prevent query execution with some other statement 
} 

SqlDataSource1.SelectCommand = "SELECT * FROM [TABLE1] where [" + DropDownList1.Text + "] like @value AND [empUser] LIKE @user"; 
SqlDataSource1.SelectParameters.Add("value", "%" + searchTB.Text + "%"); 
SqlDataSource1.SelectParameters.Add("user", "%"+LoggedInUser+"%"); 
SqlDataSource1.DataBind(); 
+0

내 케이스의 ValidFied1에 무엇을 넣을 까? 예를 들어 주시겠습니까? Thks – gymcode

+0

@RUiHAO : DropDownList1의 모든 값 또는 사용자가 검색을 수행 할 수있는 TABLE1의 모든 필드 이름 (동일해야 함). 이것은'DropDownList1.Text' 필드에 임의의 내용 (SQL Injection)을 보내지 못하게하기 위해서 필요합니다. –

0
  1. 당신은 단순히 SQL 데이터 소스 SQL Datasource filter expression

  2. 에 대한 필터 식을 사용할 수 있습니다
  3. 당신은 ASP.NET 컨트롤의 파라미터를 허용하지 않는 한 당신의 DropDownList로와 텍스트 상자를 매개 변수화 할 수 없습니다