2012-02-12 2 views

답변

3

아니요, PDO doesn't support dynamic table or column names as prepared values. 쿼리에 삽입하는 모든 열 이름은 이스케이프되지 않으며 SQL 삽입 취약점이됩니다.

PDO :: Quote()도 도움이되지 않습니다. 문자열 만 이스케이프 할 수 있지만 mySQL에서는 열 이름이 문자열이 아닙니다.

문제를 예방하는 유일한 100 % 안전한 방법은 user_specified_order_by_field_name_here을 테이블의 유효한 열 목록과 비교하는 것입니다. 심지어는 내부적으로 열 이름으로 해석하는 숫자를 사용하여 더 많은 계층을 추가 할 수도 있습니다.

+0

그건 슈퍼 안전한 방법입니다 ... 의심 할 여지없이 화이트리스트 ... 그러나 pdp : quote 메서드 또는 다른 일반적인 기술로 여기 걱정을합니까? –

+0

@ 존 번호는 테이블 이름이 따옴표로 이스케이프되지 않기 때문입니다. PDO를 수행하면 그것에 대한 견적이 도움이되지 않습니다. –

+0

@everybody 초점 이름이 테이블 이름에 어떤 영향을 주 었는지는 모르지만 초점은 순서대로 이루어져야합니다. 또한, 내 질문에, 쿼리가 될 수 : 테이블, 탈출 그것은 여전히 ​​필요합니다 (SQL 여부, 테이블 이름이 문자열을 포함 할 수 있습니다 또는하지 않음) 악의적 인 사용자 문자열이 여전히 나쁜 의도 SQL 조각을 주입 수 있기 때문에 거기에 테이블 이름이 있습니다. 테이블 이름이 가질 수 있는지 여부는 부적합합니다. 그러나 그것은 그 초점이 아니 었습니다. 내 상황에서는 테이블 이름이 변수와 함께 전달되지 않고 SQL에 연결되어 있습니다. –

관련 문제