ASP를 사용하는 이전 내부 웹 사이트에서 발생하는 SQL 주입 공격으로부터 보호하기 위해 정리 중입니다. 여기ADO 명령으로 채워지지 않은 ADO 레코드 집합 메서드 실행
데이터베이스 연결이대로 Connect.asp
<%
on error resume next
Set DB = Server.CreateObject("ADODB.Connection")
DB.CommandTimeout = 180
DB.ConnectionTimeout = 180
connStr = "Provider=SQLOLEDB;Data Source=xxx-xxxx-xxxxxx;Initial Catalog=xxxx;Persist Security Info=True;User ID=xxxxx;Password=xxxxxxxxxxxx;"
DB.Open connStr
' Check DB connection and go to Error Handler is error exists
if DB.state=0 then
Response.Write "<p>Cannot connect to database.</p>"
TrapError Err.description
Response.end
end if
%>
이 작동하고 DB 연결이 열립니다라는 별도의 ASP 파일에 설정입니다 ... 코드에서 모두의 요점입니다.
DBFunctions.asp라는 파일을 사용하여 저장 프로 시저와 해당 매개 변수에 맵 함수를 정렬하는 데 사용합니다. 다른 ASP 페이지 프런트 엔드 페이지에 ADO 레코드 집합을 반환하려면 아래 함수를 사용하려고합니다. 레코드가 반환 없다는 것을 여기
Function GetFacilityByFID(fid)
set rs = server.CreateObject("ADODB.Recordset")
Set cmd = Server.CreateObject("ADODB.Command")
Set cmd.ActiveConnection = DB
cmd.CommandText = "GetFacilityByFID"
cmd.CommandType = adCmdStoredProc
cmd.Parameters.Append cmd.CreateParameter("@FID", adVarChar, adParamInput, 20)
cmd("@FID") = fid
Set rs = cmd.Execute
Set GetFacilityByFID = rs
End Function
는 facDetail.asp
<%
Dim FID, FCBI, Error
FID = Request("FID")
FCBI = Request("FCBI")
' Check DB connection and go to Error Handler is error exists
if DB.state=0 then
Response.Write "<p>Cannot connect to database.</p>"
TrapError Err.description
Response.end
else
if FID then
Set RS = GetFacilityByFID(FID)
elseif FCBI then
Set RS = GetFacilityByFCBI(FCBI)
end if
if RS.EOF then
Response.Write "<BR><p class=alert>No record found</p>"
response.End
end if
end if
%>
호출 페이지가 표시됩니다 호출 프런트 엔드 ASP 페이지에서 코드
하지만, 저장 프로시 저는 SSMS에서 실행될 때 작동합니다.
업데이트 코드
다음은 GetFacilityByFID 저장 프로 시저의 SQL 코드입니다.
CREATE PROCEDURE [dbo].[GetFacilityByFID]
@FID varchar(20)
AS
BEGIN
SET NOCOUNT ON;
SELECT [FAC_CBI_NBR]
,[FAC_ID]
,[FAC_TYPE]
,[FAC_SUBTYPE]
,[FAC_REGION]
,[FAC_COST_CENTER]
,[FAC_SUPPLY_CODE]
,[FAC_UPLINE]
,[FAC_SERVICE]
,[FAC_LOCATION_NAME]
,[FAC_LOCAL_ADDR1]
,[FAC_LOCAL_ADDR2]
,[FAC_LOCAL_CITY]
,[FAC_LOCAL_STATE]
,[FAC_LOCAL_ZIP]
,[FAC_MAIL_ADDR1]
,[FAC_MAIL_ADDR2]
,[FAC_MAIL_CITY]
,[FAC_MAIL_STATE]
,[FAC_MAIL_ZIP]
,[FAC_COUNTRY]
,[FAC_PHONE]
,[FAC_FAX]
,[FAC_MANAGER]
,[FAC_CONTACT]
,[FAC_CONTACT_PHONE]
,[FAC_CONTACT_EXT]
,[FAC_CONTACT_EMAIL]
,[FAC_COMMENTS]
,[FAC_CHANGED_BY]
,[FAC_LAST_UPDATE]
,[FAC_MAILOUT]
,[FAC_CONTRACTION]
,[FAC_PROPERTY_CODE]
,[FAC_ATTN_TO]
FROM [cbid].[dbo].[FACILITY]
WHERE [FAC_ID][email protected]
END
GO
아무도 잘못되었다고 말할 수 있습니까? 나는 이것을 너무 오랫동안보고 있었고 그것에 좌절감을 느꼈다.
도움이 될 것입니다.
편집 :
이 문제의현황 : 점점 ADO를 공급자로부터 다음
오류 번호 : -2147217904 오류 제품 설명은 : 프로 시저 또는 함수 'GetFacilityByFID가'매개 변수 기대 '@FID' , 그것은 공급되지 않았다. 오류 원본 : 당신이 매개 변수를 설정하는 방법은 권리를 보지 않는다
내가 줄 수있는 최고의 조언은 Next'는 당신이 실제로 얻고있는 어떤 오류보고 받아 다시 시작 오류에'주석, 그것은 진짜 엉망 놀라지 아니에요 거기에서. – Lankymart
다음 번에 On Error 오류를 제거하고 내가 얻는 것을 확인하겠습니다. –
오류가 문에 의해 숨겨지기 때문에이 상황에서 가장 먼저해야 할 일입니다. 'On Error Resume Next'가 작동하는 방식은 오류가 'Err' 객체에 오류를 기록하고 다음 명령문으로 넘어가는 진술을 만날 때 발생합니다. 이것은 계속해서 원래의 오류를 찾는 문제를 일으킬 수 있습니다. – Lankymart