2012-08-08 3 views
0

예 : 동적 값을 선택

$user_input = $_POST['input']; 
'SELECT '.$user_input.' FROM table_name' 

그래서 그것은 보안을 기반으로 데이터베이스의 열 (이 예 분명히 안전하지 않은) 값을 선택합니다. 실용적이고 허용 가능한 코드인가?

+0

무엇이'$ var'입니까? – nkr

+0

죄송합니다. $ user_input –

+1

으로되어 있습니다. 이것은 매우 안전하지 않은 코드입니다. 예를 들어 $ user_input = '; table_name에서 삭제; # '; –

답변

1

SQL에서는을 MySQL과 같이 DBMS에 보냅니다. 이 때문에 원하는 모든 string을 빌드하여 DBMS에 제출할 수 있습니다.

결과 SQL 쿼리가 유효한지 확인해야합니다. 이는 예를 들어 열이 존재하고 잘못된 기호가 나타나지 않습니다.

+0

맞습니다. 값이 유효한 것인지 확인하는 큰 if 문이 있으며, 참인 경우 쿼리가 전송됩니다. 감사! –

1

$user_input이 유효한 열 이름이어야한다는 가정하에이 코드는 유효합니다. 즉, 이스케이프 처리가 아닌 한 특수 문자, 예약어 등이 없어야합니다.

그러나이 코드는 안전하지 않지만 쿼리를 안전하게 작성하고 PDO 또는 MySQLi (더 이상 지원되지 않는 mysql_* 기능 ...)를 사용하려는 경우에는 괜찮을 것입니다. 더 이상 사용되지 않는 함수 (예 : mysql_real_escape_string)를 사용하지 않는 예제가 필요하면이를 제공 할 것입니다.

나는이 코드가 안전하지 않다는 것을 알았다는 것을 알고 있지만, 호기심이 있다면 여기에 또 다른 예가 있습니다. 의견 및 this question에서 논의 된 바와 같이,이 입력 :

$user_input = '; DELETE FROM table_name ; *'; 
'SELECT '.$user_input.' FROM table_name' 

테이블 table_name의 전체 내용을 삭제합니다. 이 코드가 구문 오류를 일으키더라도, MySQL은 계속 실행하여 을 효과적으로 잘라 버릴 것입니다.