2010-07-15 2 views
0

(이것은 고전적인 ASP입니다.) 이것은 단지 텍스트를 이스케이프 처리하는 경우에 해당하는 것으로 확신하지만 아직 아무것도 찾지 못했습니다. 모든 종류의 문자가 포함될 수있는 텍스트 영역이 있고 해당 텍스트 영역에있는 모든 레코드를 업데이트해야하지만 내 SQL 쿼리를 중단시키는 오류가 발생합니다. 이는 긍정적 인 내용을 내용과 관련이 있습니다. 텍스트 영역.어떻게 텍스트 영역 데이터를 SQL Server 데이터베이스에 저장합니까?

그래서 나는 지금까지 내 SQL 쿼리 등이 있습니다

"UPDATE document SET displayheading='" & _ 
    stripillegal(request("txt_displayheading")) & _ 
    "', displayorder=" & displayorder & _ 
    ", shortdescription='" & stripillegal(request("txt_shortdescription")) & _ 
    "', document_note='" & request("document_note") ...blah blah blah 

그래서 내가 쿼리를 파괴하지 않고 기록을 업데이트 할 수 있도록 내가 텍스트 영역을 포함 할 어떻게 궁금하네요? ' 같은 문자가 있는지

+1

여기에 SQL 솔루션입니까? –

+3

진술 :이 코드에는 SQL 주입 취약점이 있습니다. – JohnFx

+2

전달 된 매개 변수 값을 처리하기 위해 데이터 액세스 middelware (예 : ADO)를 사용하여 매개 변수가있는 준비된 SQL 문 또는 저장된 procs를 사용하면 'stripillegal', 'FormatDateText'등의 기능을 무료로 사용할 수 있습니다. – onedaywhen

답변

1

newStr 변수를 사용하여 여기에 동적 피하는 방법 SQL을 사용하고 SQL 주입 가능성을 해결하십시오. 매개 변수화 된 쿼리를 사용합니다. 당신이 ADO를 시도 할 수있는 작업은 여기

DECLARE @DisplayHeading varchar(100) 
    DECLARE @DisplayOrder int 
    DECLARE @ShortDescription varchar(100) 
    DECLARE @DocumentNote varchar(100) 

    DECLARE @command nvarchar(500) 
    DECLARE @params nvarchar(500) 

    SET @command = N'UPDATE document 
     SET [email protected] 
     , [email protected] 
     , [email protected] 
     , [email protected] 
     --...blah blah blah' 

    SET @params = N'@DisplayHeading varchar(100), @DisplayOrder int, 
      @ShortDescription varchar(100), @DocumentNote varchar(100)' 

-- Assign values to user variables. 

EXEC sp_executesql @command, @params, @DisplayHeading, 
    @DisplayOrder, @ShortDescription, @DocumentNote 


그리고 : 오류가 무엇을 얻고있어

cmd.CommandText = "UPDATE document " & _ 
     "SET [email protected], [email protected], " & _ 
     "[email protected], [email protected] " & _ 
     "--...blah blah blah" 

    cmd.Parameters.Add(New SqlParameter("@DisplayHeading", DisplayHeading)) 
    cmd.Parameters.Add(New SqlParameter("@DisplayOrder", DisplayOrder)) 
    cmd.Parameters.Add(New SqlParameter("@ShortDescription", ShortDescription)) 
    cmd.Parameters.Add(New SqlParameter("@DocumentNote", DocumentNote)) 
1

쿼리가 중단됩니다, 먼저 교체해야합니다

newStr = Replace("'", "''", request("txt_displayheading")) 

그리고 당신의 쿼리에

대신 request("txt_displayheading"

+0

끝에서 여분이 필요함) –

+0

직접 제거하고 싶지는 않습니다. 상상해 stackoverflow 경우,이 단어 "do not"이 "dont"데이터베이스로 이동합니다 주석. 작은 따옴표를 두 개의 작은 따옴표로 바꾸기 만하면됩니다. –

+0

'''을 제거하지 마십시오.'' ''로 변경하면 올바르게 저장됩니다 .. –

관련 문제