타사에서 데이터베이스를 읽어서 실행하고 결과를보고하도록 SQL 문자열을 삽입해야합니다. ,최상의 방법으로 sanitize하는 방법
string sql = "SELECT ";
foreach(KeyValuePair<string, string> field in report.fields)
{
sql += "[" + field.Key + "] as [" + field.Value + "];
}
sql += " WHERE [email protected]";
내가 변수화 할 수 있습니다이 쿼리의 일부분 만 WHERE 절입니다 : 열을 선택할 수 있습니다 사용자가 보고서에 원하기 때문에,뿐만 아니라 열 이름을 변경, 나는이 같은 코드로 종료했습니다 그러나 웹에 대한 나의 연구가 잘못된 것이라면 SELECT 절의 컬럼 이름과 별칭을 매개 변수화할 방법이 없습니다. 자, 프로그램이 작동하는 방식을 바꿀 수 없다는 것을 감안할 때 (제 3 자에게 유효한 SQL 쿼리를 만들어야 만합니다.), 입력 문자열을 삭제하는 가장 좋은 방법은 무엇입니까?
열 이름에 대한 부분을 유효한 열의 목록과 비교하여 해결했지만 알기 쉽습니다. 사용자가 부여 할 수있는 80 자 미만의 문자열 일 수 있습니다. .
이것은 X/Y 질문의 큰 부분입니다. 한 가지 대답은 이것을하지 않고 프로그램 설계를 변경하지 않아도됩니다. – Magisch
또 다른 방법은 영숫자 아스키 문자와 지정된 공백 문자 만 허용 한 다음 문자열을 이스케이프 처리하는 것입니다. – Magisch
"프로그램 작동 방식을 변경할 수 없습니다"라는 부분을 놓쳤습니다. 그것은 당신의 코멘트를 XY 호언 장담의 큰 것으로 만든다. 그런데 두 번째 주석은 더 많은 해결책입니다 ... 정규 표현식에 대한 이름 별칭의 유효한 문자를 제한 할 수 있습니다. 나는 그것을 생각할 것이다. – Rekesoft