문제

.NET,Java 과는 다른 높은 수준의 데이터베이스 API 의에서 다양한 언어 자주 제공하는 기술로 알려져 있 준비 계산서와 매개 변수는 바인딩을 반대하는 일반 텍스트 보내는 명령은 데이터베이스 서버입니다.내가 무엇을 알고 싶은 무엇이 일어나는 실행할 경우 다음과 같은 문을

SqlCommand cmd = new SqlCommand("GetMemberByID");
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter param = new SqlParameter("@ID", memberID);
para.DbType = DbType.Integer;
cmd.Parameters.Add(param);

내가 이것을 알고 있는 것이 가장 좋습니다.SQL injection 공격은 최소화 이 방법입니다.하지만 무엇을 정확하게 발생 후드에서 실행할 경우 이러한 문은?최종 결과는 여전히 SQL 안전 문자열?하지 않을 경우,최종 결과는 어떻게?고 이를 방지하기에 충분한 SQL injection attacks?

도움이 되었습니까?

해결책

MySQL 매뉴얼 페이지 에서 준비된 문을 많이 제공합 정보(적용해야 하는 다른 RDBMS).

기본적으로,당신의 문이 구문 분석 및 처리 시간에 앞서,그리고 매개변수 별도로 발송하는 대신 처리와 함께 SQL 코드입니다.이를 통 SQL injection 공격하기 때문에 SQL 구문 분석하기 전에 매개 변수를 설정.

다른 팁

에서 평신도 측면:는 경우 성명서를 보낸 다음에 DB 를 사용하여 계획을 사용할 수 있는 경우,그것은 없지를 다시 계획 모든 시간을 이 쿼리 전송을 통해 그만의 값이 params 이 변경되었습니다.이것은 매우 비슷하는 방법저 작업,추가적인 혜택과 함께 발동할 수 있는 권한을 통해 발동을 기본 테이블에서 모든

를 사용하는 경우 MS SQL,로드 프로파일러를 당신이 볼 것이 무엇 SQL 문을 생성할 때 사용하여 매개 변수화 쿼리를 처리합니다.여기를 들어(나를 사용하여 기업 Library3.1,그러나 결과는 같은 사용하여 SqlParameters 직접)에 대한 SQL Server2005:

string sql = "SELECT * FROM tblDomains WHERE DomainName = @DomName AND DomainID = @Did";
Database db = DatabaseFactory.CreateDatabase();
using(DbCommand cmd = db.GetSqlStringCommand(sql))
{
  db.AddInParameter(cmd, "DomName", DbType.String, "xxxxx.net");
  db.AddInParameter(cmd, "Did", DbType.Int32, 500204);

  DataSet ds = db.ExecuteDataSet(cmd);
}

이메일:

exec sp[underscore]executesql N'SELECT * FROM tblDomains WHERE DomainName = @DomName AND DomainID = @Did',
  N'@DomName nvarchar(9),
  @Did int',
  @DomName=N'xxxxx.net',
  @Did=500204

당신은 또한 볼 수 있습니다 여기는 경우 따옴표 문자로 전달된 매개 변수들은 탈출 그에 따라:

db.AddInParameter(cmd, "DomName", DbType.String, "'xxxxx.net");

exec sp[underscore]executesql N'SELECT * FROM tblDomains WHERE DomainName = @DomName AND DomainID = @Did',
  N'@DomName nvarchar(10),
  @Did int',
  @DomName=N'''xxxxx.net',
  @Did=500204
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top