2016-09-06 2 views
-1

RetrieveTableDisplay() 메서드는 신뢰할 수없는 소스에서 가져온 입력을 사용하여 SQL 쿼리를 호출합니다. 이 호출은 공격자가 명령문의 의미를 수정하거나 임의의 SQL 명령을 실행할 수있게합니다.메서드 RetrieveTableDisplay()는 신뢰할 수없는 소스에서 오는 입력을 사용하여 작성된 SQL 쿼리를 호출합니다.

string sql = 
    SqlHelper.GetSqlString(Constants.RetrieveTableDisplay) + tableName + 
    " WHERE ACCOUNT_NBR='" + AccountNumber + 
    "' ORDER BY " + GenerateOrderByClause(tableName) + ") a) where rn > " + 
    (currentPageNumber * currentPageSize).ToString() + " AND rn <= " + 
    ((currentPageNumber * currentPageSize) + currentPageSize).ToString(); 

string recordCount = 
    "select count(*) from " + tableName + 
    " WHERE ACCOUNT_NBR='" + AccountNumber + "'"; 
    //Issue is somewhere here of sql injection 

if (!Utils.IsUnitTestCase) 
{ 
    try 
    { 
     using (DbCommand cmd = 
       OraDB.GetSqlStringCommand(this.ProcessTableName(sql))) 
     { 
      using (IDataReader reader = OraDB.ExecuteReader(cmd)) 
      { 
       object o = OraDB.ExecuteScalar(CommandType.Text, recordCount); 
       if (o != null) 
       { 
        lstEntities.TotalRecords = Convert.ToInt32(o); 
       } 

       while (reader.Read()) 
       { 
        objBasTransactionLog = new BASTransactionLog(); 
        PopulateEntity(objBasTransactionLog, reader); 

        lstEntities.Add(objBasTransactionLog); 
       } 
      } 
     } 
    } 
} 

사용자 정의 권장 사항 :

구제는 SQL 문을 구축 할 문자열 연결을 사용하지 않을 것입니다. SQL 문을 작성하는 데 Prepared statements (placeholder라고도 함)를 사용해야합니다.

+0

Using Parameters for SQL Server Queries and Stored Procedures을 참조하십시오 우리가 당신을 위해 그것을 해결하기 위해 기대? [둘러보기]와 [질문]을 읽어 다시 시작하십시오. – CodeCaster

+0

미안하지만 나는이 질문을 당신 같은 천재의 사람들에게 물었다. 당신이 도울 수 없다면 누구나 당황하지 마십시오. 나는 그것을 혼자서 해결했다. 그러나 나는 당신이 문제를 해결하기 위해 tym을 가지지 않고 있지만 당황하게하기 위해 많은 시간을 갖고 있다는 것을 당신에게 안타까워합니다. – Dilip

+0

문제는 질문이 답할 수 없기 때문에 대답 할 수 없다는 것입니다. – CodeCaster

답변

0

SQL 주입을 방지하는 데 권장되는 방법은 SqlParameter입니다. 문자열 연결을 사용하여 매개 변수 값을 추가하지 마십시오.

그래서 당신은 연구하고이 문제를 해결하는 데 전혀 _any_ 노력을 할 필요가 없습니다 그래서 당신은 여기에 코드 감사의 결과를 덤핑하고