2011-08-20 2 views
4

SQL 쿼리에서 잘못된 문자를 이스케이프 처리하는 오라클 기능이 있습니까? 다른 문자열에서 쿼리를 작성하는 코드가 있고 그 중 일부는 ' 문자를 포함 할 수 있습니다.이 경우 SQL 쿼리가 중단됩니다.오라클 이스케이프 기능

+0

당신이 사용하는 언어를 언급하지 않는다면 ... – Yahia

+0

흠, 나는 SQL 쿼리에서 액세스 할 수있는 함수도 pl/sql에서 액세스 할 수 있다고 생각하지만 중요하다면 : pl/sql –

답변

11

Yahia가 지적했듯이 항상은 동적으로 SQL 문을 어셈블하는 대신 바인드 변수를 사용해야합니다. 이것이 SQL 주입 공격으로부터 자신을 보호하는 적절한 방법입니다. 문자열을 이스케이프하면 보호 수준이 훨씬 낮아집니다.

즉, Oracle 10.1 이상을 사용한다고 가정 할 때 q 인용 구문을 사용할 수 있습니다.

1 select q'[This is a string with an embedded ']' str 
    2* from dual 
SQL>/

STR 
----------------------------------- 
This is a string with an embedded ' 

같은 뭔가 당신은 다른 문자의 수는 문자열

1 select q'<This is a string with an embedded '>' str 
    2* from dual 
SQL>/

STR 
----------------------------------- 
This is a string with an embedded ' 

SQL> ed 
Wrote file afiedt.buf 

    1 select q'{This is a string with an embedded '}' str 
    2* from dual 
SQL>/

STR 
----------------------------------- 
This is a string with an embedded ' 
+2

와우, 멋진 기능 :) –

+1

좋은 해결 방법이지만 문자열에'] '... 문자가 포함되면 실패합니다. –

+2

@Vincent - 맞아요. 첫번째가 실패하면 a가 있고, 두 번째가 실패하면 a>가 있고, 세 번째가 실패하면 a}가 발생합니다. 문자열 자체에서 발생하지 않는 인클로저 문자를 선택해야합니다. –

4

문자열에서 쿼리를 작성하면 안됩니다. 대신 매개 변수를 사용하십시오. 그렇지 않으면 항상 누군가가 SQL을 주입 할 수있는 가능성이 있습니다.

+0

+1 바인드 변수 –

3

두 따옴표 함께 작은 따옴표를 이스케이프에 나타날 수있는 어떤 문자에 따라 함께 [및] 문자를 대체 할 수 있습니다. 문자열에 ' 대신 ''을 사용하십시오.