DataView RowFilter 속성을 사용하여 AppRelativeCurrentExecutionFilePath를 기반으로 캐싱 된 DataTable을 필터링하는 처리기를 작성하고 있습니다. 주입 공격을 방지하기 위해 입력을 인코딩하는 가장 좋은 방법은 무엇입니까?.NET DataView RowFilter에 대한 인젝션 공격
다음 중 충분한 것이 있습니까? 더 나은 /보다 우아한 방법이 있습니까?
dataView.RowFilter = String.Format("Name LIKE '{0}%'", EncodeString(query));
private string EncodeString(string s)
{
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.Length; i++)
{
char c = s[i];
if (c == '*' || c == '%' || c == '[' || c == ']')
sb.Append("[").Append(c).Append("]");
else if (c == '\'')
sb.Append("''");
else
sb.Append(c);
}
return sb.ToString();
}
난 단지 ... 당신이 여기에 SQL을 삽입 할 수 있다고 생각하지 않습니다 : 지적했듯이, 다음과 같은 작업 같은 것을 수 주입하여 테이블의 모든 행을 얻을 수 있습니다 예외가 발생합니다. 그러나 그렇습니다. 그것은 제가하는 일입니다. – dotjoe
메모리 내 데이터를 사용하는 경우 어떤 컬렉션이 아닌 왜 'DataTable'을 사용해야합니까? 당신은'Where'로 그것을 걸러 낼 수있을 것이고 주사 만 신경 쓰지 않아도 될 것입니다. –
@SergRogovtsev - '09 년에 질문을했습니다. 아마도 .NET 1.1 앱이었을 것입니다. 기업은 업그레이드 속도가 느립니다. – MyItchyChin