2012-07-26 8 views
3

나는 매우 이상한 문제가 있으며 이것을 제거하는 방법을 모른다.사전 검색 - URL 인코딩

나는 나의 질의는 다음과 같이해야 내 프로젝트, 내 문제 내가 옵션을 비교 LIKE을 사용하고있다 ACC 및 검색의 끝은 기본적으로 학교 검색

하나 개 사전 검색이 :

select * 
from tbl_schooldetails 
where 
    state = 'Gujarat' 
    and city = 'Ahmedabad' 
    and area = 'Navrangpura' 
    and (board = 'xx' or board LIKE '%CBSE Board%' or board LIKE '%Gujarat Board%') 

대신 나는 쿼리 이하이 얻을 :

select * 
from tbl_schooldetails 
where 
    state = 'Gujarat' 
    and city = 'Ahmedabad' 
    and area = 'Navrangpura' 
    and (board = 'xx' or board LIKE '�SE Board%' or board LIKE '%Gujarat Board%') 

%CB "로 변환"기호를 발견하는 경우 그래서 "CBSE Board"옵션과 관련된 결과를 검색 할 수는 없습니다.

누구나이 URL 인코딩을 제거하는 방법을 알려 줄 수 있습니까?

string qry = "select * from tbl_schooldetails where state = '" + sdpd4.SelectedItem.Text + "'"; 

    if (sdpd2.SelectedItem.Text != "Select City") 
    { 
     qry += " and city = '" + sdpd2.SelectedItem.Text + "'"; 
    } 

    if (sdpd1.SelectedItem.Text != "Select Area") 
    { 
     qry += " and area = '" + sdpd1.SelectedItem.Text + "'"; 
    } 

    if (CheckBoxList3.SelectedItem != null) 
    { 
     qry = qry + " and (board = 'xx'"; 

      for (int i = CheckBoxList3.Items.Count - 1; i >= 0; i--) 
      { 
       if (CheckBoxList3.Items[i].Selected == true) 
       { 

        string mt = CheckBoxList3.Items[i].ToString(); 
        qry = qry + " or board LIKE '" + '%' + mt + '%' + "'"; 

       } 
      } 
      qry = qry + ")"; 
    } 


    if (RadioButtonList1.SelectedItem != null) 
    { 
     qry += " and gender ='" + RadioButtonList1.SelectedItem.Text + "'"; 
    } 



    Response.Redirect("schoolsearchresult2.aspx?search=" + qry); 
+0

khyati에 대신 당신은 당신이 당신은 당신이 URL에서 오른쪽 그 매개 변수를 전달하지 않는 쿼리 – HatSoft

+2

을받을 수 있나요 어디에서 어떻게에서 말해 줄 수주십시오? 실제로 이러한 쿼리를 작성하고 실행하는 방법은 무엇입니까? 일부 추가 코드는 매우 도움이 될 것입니다 - 쿼리를 어떻게 묶어서 데이터베이스에 대해 실행하는지 보여주는 방법이 좋을 것입니다. URL에서 매개 변수를 직접 전달하는 경우 SQL 주입 위험이 높습니다. – dash

+0

아무 것도 시도해 보셨습니까? URLDecode()와 같은가요? 앞에서 언급했듯이 URL을 통해 완전한 쿼리 또는 쿼리 매개 변수를 전달하는 것은 좋지 않습니다. –

답변

4

이제 원래의 질문이 명확 것을을 편집 :

이이 쿼리가 생성되는 곳에서 내 코드입니다.

Response.Redirect("schoolsearchresult2.aspx?search=" 
    + HttpServerUtility.UrlEncode(qry)); 

:하지만 ... 이것에

Response.Redirect("schoolsearchresult2.aspx?search=" + qry); 

을 :

그냥이 변경 내 경고 (그리고 모두 다른 사람의가) 올바른 남아 : 쿼리 문자열에서 WHERE 절을 통과 매우 위험합니다 - 결과 URL을 쉽게 조정하면 데이터베이스를 파괴 할 수 있습니다.

원래 대답은

당신은 16 진수로 서버에 해석되는 URL로 %의 CB를 두는 것 같다.

% 25CB를 사용하는 경우 "% CB"로 해석되어야합니다.

또는 내장 된 C# 함수 중 하나를 사용할 수도 있습니다. 제 생각 엔 당신이 필요로하는 것은 HttpServerUtility.UrlEncode입니다.

매우 중요 :

이 실제 응용 프로그램이 아닌 개념 증명 프로젝트의 경우, you must not copy data directly from the URL into your SQL string!

+0

+1 링크 !!!! LOL – billy

+0

soooo 이후에 ans로 표시하려고하지만, 오늘은 그것을 해결했습니다. . . 하하하. 나는 다른 옵션을 찾고 있었지만 이것이 최고라고 생각했습니다. . . 이 이상한 문제가있는 사람은 누구나 – jackerj

+0

을 고마워합니다. Server.UrlEncode (qry)를 사용하여 쿼리 문자열을 전달했습니다. – jackerj

0
당신이 걱정할 필요 없다, 그래서이 방법으로 당신의 SQL 쿼리를 구축 제안

쿼리 사용을 실행할 때

string sqlQuery = "select * 
from tbl_schooldetails 
where 
    state = @state 
    and city = @city 
    and area = @area 
    and (board = @board1 or board LIKE "; 
sqlQuery += "%@board2%"; 
sqlQuery += " or board LIKE %@board3%"); 

다음 URL 인코딩 및 SQL 인젝션에 대한

예 :

SqlCommand cmd = new SqlCommand(command); 
cmd.Parameters.AddWithValue("@state", Request.Form["state"]); 

...... 그래서

+0

그에게 세부 사항을 제공하는 것이 좋지만 ... 왜 String.Format을 사용하여 상수를 연결하고 있습니까? – egrunin

+0

@egrunin 좋은 점 아픈 지금 변경 – HatSoft

+0

나중에 솔루션에 대한 많은지만, 이미 모든 옵션에 대한 프로젝트 및 작업 100 % 벌금의 대부분에서 코딩 않았다. 그래서 지금은 코딩을 변경할 생각이 아닙니다. 솔루션과 관련된 URL 인코딩 만 있으면됩니다. – jackerj