문제

C# 및 .NET 3.5를 사용하고 있습니다. 나중에 원격 서버에서 실행될 T-SQL 삽입 문을 생성하고 저장해야합니다.

예를 들어, 직원이 있습니다.

new Employee[]
{
   new Employee { ID = 5, Name = "Frank Grimes" },
   new Employee { ID = 6, Name = "Tim O'Reilly" }
}

그리고 나는 다음과 같은 문자열 배열로 끝나야합니다.

"INSERT INTO Employees (id, name) VALUES (5, 'Frank Grimes')",
"INSERT INTO Employees (id, name) VALUES (6, 'Tim O''Reilly')"

String.format로 삽입 문을 작성하는 코드를보고 있지만 옳지 않습니다. 나는 sqlcommand를 사용하는 것을 고려했다 (희망 이 같은), 그러나 명령 텍스트를 매개 변수와 결합하는 방법을 제공하지 않습니다.

단일 따옴표를 대체하고 문자열을 만들기에 충분합니까?

string.Format("INSERT INTO Employees (id, name) VALUES ({0}, '{1}')",
    employee.ID,
    replaceQuotes(employee.Name)
    );

이 작업을 수행 할 때 무엇을 걱정해야합니까? 소스 데이터는 상당히 안전하지만 너무 많은 가정을하고 싶지는 않습니다.

편집 :이 경우 SQLConnection이나 SQL Server에 직접 연결하는 방법이 없음을 지적하고 싶습니다. 이 특정 앱은 SQL 문을 생성하고 다른 곳에서 실행되도록 대기해야합니다. 그렇지 않으면 sqlcommand.parameters.addwithValue ()를 사용하고 있습니다.

도움이 되었습니까?

해결책

매개 변수화 된 명령을 사용하십시오. 매개 변수를 원격 서버로 전달하고 SQL Server로 호출하여 SQL 자체와 매개 변수 값의 구별을 유지합니다.

치료 데이터를 코드로 혼합하지 않는 한 괜찮을 것입니다.

다른 팁

SQLCommand 객체를 작성하십시오.

SqlCommand cmd = new SqlCommand(
        "INSERT INTO Employees (id, name) VALUES (@id, @name)", conn);

SqlParameter param  = new SqlParameter();
param.ParameterName = "@id";
param.Value         = employee.ID;

cmd.Parameters.Add(param);

param  = new SqlParameter();
param.ParameterName = "@name";
param.Value         = employee.Name;

cmd.Parameters.Add(param);

cmd.ExecuteNonQuery();

대체 인용문 기능을 수정하십시오.

void string replaceQuotes(string value) {
     string tmp = value;
     tmp = tmp.Replace("'", "''");
     return tmp;
}

건배!

흠 나는 당신이 매개 변수화 된 쿼리를 사용해야한다는 것에 동의하고 그것을 남겨 둘 것입니다. 그러나 어떻게이 SQL 문을 원격 서버로 전달합니까? 임의의 SQL 명령을 수락하고 실행하는 웹 서비스와 같은 일부 유형의 서비스가 있습니까?

어떤 종류의 프록시를 겪고 있다면 클라이언트에 대한 데이터를 얼마나 소독할지에 관계없이 해커는 앱을 우회하고 서비스를받을 수 있습니다. 이 경우 Cade가 권장하고 데이터를 예를 들어 XML로 전달하거나 선택한 형식 (JSON, BAINSER 등)을 수행 한 다음 실제로 명령을 실행하기 직전에 SQL을 구축하십시오.

주입을 피하려면 데이터를 원격 서버 (아마도 XML)로 배송 한 다음 원격 서버에서 데이터를 적절한 데이터 유형으로 다시 변환하고 매개 변수화 된 쿼리 또는 저장된 Procs에서 사용해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top