2009-12-26 6 views
12

MySQL 쿼리에서 테이블 이름 주위에 백틱을 두는 것이 얼마나 중요합니까? 보안과 관련이 있습니까? 테이블 이름이 사용자 입력을 기반으로 PHP에서 동적으로 생성되는 경우 MySQL 주입 공격이 테이블 이름을 통해 가능합니까?MySQL 쿼리에서 테이블 이름 주위에 백틱의 중요성

답변

15

역 따옴표 실수로 예를 들어 SQL 예약어 인 이름을 사용하는 데 도움이. "어디서"라는 테이블을 가져라. 나는 동의하는 테이블의 어리석은 이름이다. 그러나 당신이 역 따옴표로 감싸면 괜찮을 것이다.

+5

'password'라는 필드가있을 때 이런 일이 많이 발생합니다. –

+0

고마워, 나는 새로운 것을 배웠다. 나는 backticks로 "order"라는 칼럼을 표시하는 것은 그 예약어와 충돌하는 것을 피할 것이라고 추측하고있다. – eoinoc

+0

PostgreSQL에서도 사용해야합니까? –

3

키워드와 이름이 같은 테이블 이름이있는 경우 (예 : 다음 쿼리는 여전히 작동합니다, 선택

select * from `select`; 
10

MySQL 쿼리에서 테이블 이름 주위에 역주를 두는 것이 얼마나 중요한지. 보안과 관련이 있습니까?

backticks에 관한 한, mysql-specifcs 이름과 쿼리 이름 사이에 이름 충돌이있는 경우이를 사용합니다. 테이블 이름은 사용자 입력을 기반으로 PHP 에서 동적으로 생성되는 경우

테이블 이름을 통해 수 MySQL을 주입 공격인가?

사용자 입력이있는 경우 사용자가 입력 한 내용을 필터링하고 유효성을 검사해야합니다. 그렇습니다. 보안 위험이 있습니다.

나는 당신이 당신의 쿼리에서 사용할 수있는 변수에 대한 기능을 mysql_real_escape_string를 INTVAL 숫자를 사용하는 것이 좋습니다.

+2

이 답변에 추가하려면 ... 언제든지 SQL 문자열에 변수를 넣으면 SQL 인젝션을 할 수 있습니다. 이 데이터의 출처는 중요하지 않으며 진정한 안전성은 없습니다. 항상 모든 것을 벗어나십시오. – TravisO

+0

@TravisO : 동의하고 고마워요. – Sarfraz

+2

최근에 배운 무언가, mysql_real_escape_string()은 백틱을 벗어나지 않습니다. PHP 변수를 테이블 이름으로 사용하면 악용 될 수 있습니다. – Noodles

관련 문제