2010-11-26 2 views
0

내 프로그램 전체에 걸쳐 다양한 장소에 50 개 정도의 텍스트 상자가있을 수 있습니다. 작은 따옴표를 (이 경우 '-> \')와 바꾸는 방법을 알고 있지만 모든 텍스트 상자 하나 하나에 특정 코드를 추가하는 것보다 더 좋은 방법이 있어야한다고 생각합니다. 나는이 일을해야 할 때이 물건을 데이터베이스에 보내지고, 작은 따옴표가 있다면, 그것은 오류가 발생합니다. 프로그램의 모든 텍스트 상자가 자동으로 모든 작은 따옴표를 \ '로 바꾸도록 기본 TextBox 컨트롤 동작을 변경하는 방법이 있습니까?내 프로그램의 모든 텍스트 상자에서 '와 함께 '바꾸기

편집 :

 string statement = "select count(*) from users where username='@username'"; 
    MySqlCommand command = new MySqlCommand(statement, conn); 
    command.Parameters.AddWithValue("@username", username); 
    if (Convert.ToInt32(command.ExecuteScalar()) == 1) 

나는 paramerterized 코드를 연주하고 이것이 내가 지금 가지고있는 것입니다. 내가 이해하는 방법에서 명령문 문자열은 기본적으로 이전과 동일하지만 변수 "username"을 사용하는 곳에서는 @username이라는 매개 변수를 사용한다는 것을 알고 명령이 생성됩니다. 그런 다음 parameters.addwithvalue에서 사용자 이름 매개 변수를 username 변수에있는 값으로 바꿉니다. 불행히도, 이것은 나를 위해 작동하지 않습니다, 그리고 난 정말 사용자 이름은 여전히 ​​명령에 갇혀지고 있기 때문에 도움이 어떻게 볼 수 없어?

편집 : 문에 당신이해야한다 '주위 @username'너무

작은 따옴표를 넣을 필요가없는 문제를 찾았습니다

string statement = "select count(*) from users where [email protected]"; 

답변

6
구축하기 위해 연결을 사용하지 마십시오

SQL 쿼리. 적절한 parametrized queries을 사용하십시오. 이렇게하면 반복 쿼리가 조금 더 빨라지고 입력 소독 코드 (예 : '\'으로 대체) 및 SQL 삽입 공격이 제거됩니다.

+0

내 게시물을 편집했습니다. 다시보실 수 있습니까? 이 주석에 코드를 효과적으로 게시하는 방법을 잘 모르겠습니다. – zack

+0

고맙습니다. 당신은 나를 도와 준 톤 : D – zack

+0

괜찮습니다. 이러한 변화를 통해 막대한 보안 취약성을 제거했습니다. – cdhowie

0

U는 onKeyUp javascript 함수 또는 asp.net OnTextChanged 이벤트를 사용하여 따옴표를 변경하는 함수를 만들 수 있습니다.

+1

WPF는 ASP.NET이 아닙니다. – cdhowie

+0

wpf 태그가 보이지 않았습니다. –

1

문제를 해결할뿐만 아니라 SQL 주입에 대한 노출을 줄이기 위해 매개 변수화 된 쿼리를 사용해야합니다. 문자열 연결을 사용하여 SQL 쿼리를 작성하면 SQL injection 개의 공격에 대해 suseptable이됩니다.

관련 문제