2012-09-07 2 views
0

어셈블리에서 이와 같은 메소드를 구현하면 위험한 것으로 간주됩니까?is public void Execute (string sql)가 위험하다고 생각합니까?

public void Execute(string sql) 
     { 
      using (SqlConnection connection = new SqlConnection("MyConnectionString.....")) 
      { 
       SqlCommand command = new SqlCommand(sql, connection); 
       connection.Open(); 
       command.ExecuteNonQuery();     
      } 
     } 
+1

그것은 그 문자열에서 오는하고 그것이 어떻게 생성 위치에 따라 달라집니다. –

답변

1

그것은 당신이 전달하는 SQL 문자열을 동적으로 작성되는 경우 위험하고 사용자 입력의 연결이 포함되어 있습니다. 그렇지 않으면 일반적으로 나쁜 습관으로 간주됩니다. 저장 프로 시저가 최선의 방법입니다.

Here is the OWASP article on SQL Injection

+0

저는 "DROP TABLE Employees"와 같은 sql에서 전달되는 소비자 클래스에 대해 더 우려하고 있습니다. 이것은 합법적 인 관심사입니까? – Stack0verflow

+0

물론입니다. 저장 프로 시저에 매개 변수를 전달하면 매개 변수 내부의 데이터를 데이터베이스에 대해 절대 실행할 수 없기 때문에 위험을 줄일 수 있습니다. –

+0

전달할 매개 변수가 없습니다. C#을 사용하여 테이블을 삭제하고 만들어야합니다. SQL을 실행하기 전에 테이블 이름의 유효성을 검사해야합니까? 아니면 DropTable 메서드와 0 인수를 사용하는 CreateTable 메서드가 있어야합니까? 덜 유연하고 중복 된 코드가 더 안전합니까? 어떻게 생각해? – Stack0verflow

관련 문제