2017-04-26 6 views
0

PDO와 함께 준비된 문을 사용하여 테이블 이름을 바인딩 할 수 없음을 발견했습니다. 내가 비슷한 것을 사용할 수있는 동안 $sql = "select * from $table_name where something = :something"테이블 이름을 변수로 사용

$ table_name 변수가 쿼리를 실행하고 데이터베이스에서 값을 가져 오는 방법으로 내부적으로 할당 된 경우이 방법이 안전한가요? 또는 가변 테이블 이름을 사용하는 것은 나쁜 습관입니까? 그것이 의견을 바탕으로한다면, 나는 당신의 의견을 알고 싶습니다.

답변

0

동적 테이블 이름을 사용해야하는 상황이 있으므로 허용되는 방식입니다. 개인적으로, 나는이 요구 사항이 꼭 필요한지 아닌지를 두 번 확인한 다음 쿼리의 테이블 이름을 하드 코딩합니다. 어떤 AQL 주입을 방지하기 위해 MySQL의의 INFORMATION_SCHEMA에서 테이블 이름의 목록을 응용 프로그램 코드에 입력 에 비교 : 테이블 이름은 사용자의 입력에서 오는 경우

, 그때는 보안 조치로 흰색 목록을 사용합니다 .

테이블 이름이 mysql의 information_schema에서 오는 경우 유효한 테이블 이름이기 때문에 추가 검사없이 사용할 수 있습니다. 그냥 이름 주위에 backticks을 넣어.

테이블 이름이 응용 프로그램에서 생성 된 테이블에서 나온다면 information_schema를 통해 테이블 ​​목록을 다시 검색하고 응용 프로그램 코드에 존재하는지 확인합니다. 이렇게하면 테이블 이름이 유효한지 확인할 수 있습니다.