2015-02-04 6 views
0
<% 
Dim objRs 
Dim conn 
Dim strSearchString 

strSearchString = Request.Form("name")  
Set objRs = Server.CreateObject("ADODB.recordset") 
objRs.CursorLocation = 3 
set conn = Server.CreateObject("ADODB.Connection") 
conn.open "Data Source=" & Server.Mappath("../db/certs.mdb") & ";Provider=Microsoft.Jet.OLEDB.4.0;" 

'replace apostrophe in name to avoid issues 
strSearchString = Replace(strSearchString.tostring, "'", "''") 

'Sql Query 
sql = "Select * FROM [cert] Where [name] like '" & strSearchString & "'" 

'open connection 
ObjRs.Open sql,conn 

'setup the table 
with response 
    .write "<table border=1 width=100% cellspacing=0 cellpadding=0 class=CustomerTable>" & vbcrlf 
    .write "<tr>" 
    .write "<th class=AccName colspan=9><div align=center>" & strSearchString & "'s Certifications</div></th></tr>" 
    .write "<tr>" & vbcrlf 
    .write "<th class=AccName>Name</th>" 
    .write "<th class=AccName>Certification</th>" 
    .write "<th class=AccName>Date Completed</th>" 
    .write "<th class=AccName>Industry</th>" 
    .write "<th class=AccName colspan=2>Certification #</th>" 
    .write "<th class=AccName>Vendor</th>" 
    .write "<th class=AccName>Date Expires</th>" 
    .write "<th class=AccName><a href='viewall_sortTechnology.asp'>Technology</a></th>" 
    .write "</tr>" & vbcrlf 
End with 
%> 

아포스트로피가 포함 된 이름 문제를 방지하기 위해 바꾸기 기능을 사용하려고합니다. 페이지를 실행할 때 이것이 작동하지 않는 것 같습니다. 출력에는 "O'Brien 's Certifications"대신 "O 's Certifications"만 표시됩니다.ASP 바꾸기 기능이 작동하지 않습니다.

코드에 이름에 아포스트로피가없는 사람은 예상대로 작동합니다.

백 엔드 데이터베이스는 MS Access입니다.

저는 asp에 상당히 익숙합니다. 그래서 여기있는 모든 도움을 주시면 감사하겠습니다.

+1

이 ASP-Classic은 맞나요? 맞습니까? – Steve

+1

Classic ASP에서'.tostring' 메소드를 사용할 수 있습니까? – HansUp

+0

@HansUp 잘 잡아서는 안됩니다. 실제로는 replace()가 실패하게되는 원인이 될 것입니다. – Lankymart

답변

2

이렇게하는 것이 더 안전하고 안전한 방법은 매개 변수가있는 쿼리를 사용하는 것입니다.

은 참조 : 팁 Parameterized query in Classic Asp

+1

Diodeus가 의미하는 것은 매개 변수화 된 쿼리를 사용했다면 SQL 주입 공격으로부터 보호 될 수있을뿐만 아니라 입력 내용을 살균하기 위해 바꾸기 등을 할 필요가 없다는 것입니다. – Lankymart

-1

감사합니다, 나는 마음에 사람들은 계속 전진 할 것이다. 솔루션을 찾을 수있었습니다. 나는 그것이 원래 부분의 양식이 완전한 사도직 화 된 이름을 통과시키지 않았기 때문에 그것이 내 부분에 대한 감독이었고 교체 기능이 작동하지 않는다고 말하기에 난처했다. "O'Brien"대신 "O"만이 통과되었습니다.

양식의 문제가 변경되었으며 모든 것이 예상대로 작동합니다.

+0

어떻게 결론에 도달했는지 모르겠습니다. strSearchString = Replace (strSearchString.tostring, " '", "'")'VBScript의 문자열에'.tostring' 메서드가 없으므로 항상 실패합니다. – Lankymart