2012-12-23 5 views
0

, 나는 다음과 같은 방법으로 DataView를 통해 데이터 테이블에서 필터링을하고있는 중이 야 :ADO.Net Datatable에서 주입을 방지하는 최선의 방법은? 최근

 public static DataTable FilterDatatable(this DataTable dtable,string @operator, string colName, string colValue) 
     { 
      if (dtable != null && dtable.Rows.Count > 0) 
      { 
       DataView dataView = dtable.DefaultView; 

       if (@operator.Equals(SqlOperator.Like , StringComparison.InvariantCultureIgnoreCase)) 
       { 
        dataView.RowFilter = colName + " " + @operator + " '%" + colValue + "%'"; 
       } 
       else 
       { 
        dataView.RowFilter = colName + " " + @operator + " " + colValue; 
       } 

       return dataView.ToTable(); 
      } 
      return dtable; 
     } 

를 자, 내가 주입을 방지하기위한 방법 (내가 아는 그 주사를) 쓸 수 있지만 실제로 내가 가장 잘 알고하지 않습니다 방법은 SQL 매개 변수처럼 데이터 테이블에 주입을 방지합니다. 내가 ColVal의 인수로 작은 따옴표 추가 된 문자열을 보낼 때 방법 위

당신은 그 인스턴스에서 보호를 필요로하지 않는

답변

1

.... 예외가 발생합니다 - DataTable.Select()은 인 - 열린 데이터 행에 필터를 적용 입니다 DataTable 안에 메모리이 있으면 실제로 데이터베이스에 연결/실행되지 않습니다.

UPDATE

private string MethodName(string str) 
{ 
    return str.Replace("'", "''"); 
} 

그렇게 사용하는 따옴표의 단일 인스턴스,

dataView.RowFilter = colName + " " + @operator + " '%" + MethodName(colValue) + "%'"; 
+0

그러나 colValue에 작은 따옴표가 붙은 문자열을 전달하면 예외가 발생합니다 ...... 그래서 나는 어딘가에서 예방 주사를 놓치고 있다고 생각했습니다. –

+0

어, 예외를 게시 할 수 있습니까? –

+0

ColVal에서 Like (인수)로 Silver (작은 따옴표를 추가)를 전달하면 Operator에서와 같이 "Syntax error : 'silver'연산자 다음에 피연산자가 누락됩니다."... –

1

을 두 배로이 방법을 만드는 방법에 대해 이미 주입을 방지 한 경우 어떻게

공격은 데이터베이스를 quering하는 동안 SQL 매개 변수 (가장 좋은 방법)를 사용하여 여기 메모리 객체에 주입 방지 로그인을 적용 할 이유가 없습니다.

+0

그래, 당신 말이 맞아 .... 나는 가능한 한 구현하는 데 사용되는 SQL 매개 변수의 큰 팬이야 ....하지만 여기, 위의 메서드에서 내가 작은 따옴표를 추가 문자열을 전달하면 예외를 throw합니다 .... –

관련 문제