2009-03-24 4 views
1

테이블 및 열 이름이 다른 ColdFusion 쿼리에서 전달되는 JOIN 문의 집합을 동적으로 생성해야합니다. 문자열 값을 명령문에 전달할 때 CFQUERYPARAM은 그 주위에 작은 따옴표를 추가합니다. 이는 CFQUERYPARAM의 일부입니다. 이렇게하면 SQL 문이 손상되므로 CFQUERYPARAM을 사용하지 않고 대신 들어오는 쿼리가 정리되도록하거나 CFQUERYPARAM을 사용할 수있는 방법이 있습니까? (퓨즈 박스에서 회로/퓨즈 사용 권한을 사용하여 이러한 코드 조각을 잠글 수 있습니다.)CFQUERYPARAM을 사용하여 SQL에서 테이블/열 이름 지정

고마워.

+0

나는 작은 따옴표가 SQL을 깨뜨리는 이유를 잘 모르겠다. 단지 CF_SQL_VARCHAR을 넣기 만하면된다. 어떻게 쿼리를 중단합니까? – kevink

+0

태그의 사용은 성능보다는 sanitisation에 대한 안전성 검사였습니다. 여기서 사용되는 변수는 varchar입니다. SQL (컬럼 또는 테이블 이름)의 값이 아닌 다른 값으로 전달되기 때문에 작은 따옴표로 인해 컬럼/테이블을 찾을 수 없습니다. –

답변

3

cfqueryparam은 작은 따옴표를 추가하지 않으며 바인드 변수를 사용합니다.

"동적으로 JOIN 문 집합을 구성합니다."라는 문구는 즉시 의심 스럽습니다. 동적으로 가입하는 경우 반드시 올바르게 작업하는 것처럼 들리는 것은 아닙니다.

그러나, 테이블/열 이름, 당신이 한 번 을 위해 확실히 완전히 살균된다 - cfqueryparam가 작동하지 않습니다 당신이 CF 변수를 필요로하는 경우 - 다음 직접 CF 변수를 사용할 수 있습니다.

참고 : 안전하게 위생 처리하려면 rereplacenocase(table_name,'[^a-z_]','','all')을 사용하여 a-z와 밑줄 이외의 모든 것을 제거하십시오.

+0

감사합니다. 새로운 데이터가 추가 될 때 메인 테이블 구조와 룩업 테이블이 변경 될 수 있기 때문에 # 673805와 관련되어 있으므로 정적 인 조인 세트로는 충분하지 않습니다. 나는 이것이 공개적인 사용이 아니라 데이터 조작을위한 백엔드/로컬 어플리케이션임을 지적해야한다. –

+0

정규 표현식은 [^ \ w] + 글자, 숫자 및 밑줄이 될 것이고 더 짧을 것을 제안합니다. –

+0

\ w는 단어 문자입니다. 항상 [a-z0-9_]가 아니며 의도적으로 더 일반적인 목적을 사용합니다. 그러나 단어 문자 route에 만족하면 \ W는 [^ \ w]보다 훨씬 간단하며 의미가 동일합니다. –

1

두 개의 작은 따옴표를 사용하여 작은 따옴표를 이스케이프 처리 할 수 ​​있습니다. preserveSingleQuotes 함수를 사용할 수도 있습니다.