2010-11-25 4 views
0

사용자 이름을 요청하는 등록 시스템이 있습니다. 어떤 사람들은 그들의성에 아포스트로피 (apostrophe)를 가지며 데이터가 MySQL 데이터베이스 테이블 (예 : O'Hare)에 쓰여지지 않도록합니다.아포스트로피가 제거되는 것을 방지하는 방법 PHP MySQL

문자열에서 아포스트로피를 제거하는 mysql_real_escape_string을 사용하고 있습니다. 웹 서비스에 대해 어포 스트로피 값을 사용해야하는 경우를 제외하고는 괜찮습니다. 그렇지 않으면 웹 서비스가 false를 반환합니다.

mysql_real_escape_string을 사용하기 전에 웹 서비스에서 이름 확인을 할 수 있다고 생각했지만 보안 결함이 있습니까? 아니면 SOAP Web Services가 이미 깨끗한 입력을 확인해 줍니까?

PHP가 아포스트로피를 유지하지만 여전히 보안을 유지하고 MySQL이이를 수용 할 수있는 변수를 전달하는 더 좋은 방법이 있습니까?

+1

그것은 * 제거 * it? * 심각하게 *? –

답변

7

mysql_real_escape_string은 아포스트로피를 제거하지 않고 코드 만 이스케이프 처리하므로 일부 코드를 표시해야합니다.
이스케이프 의미 O'Hare은 문자열로 삽입 할 수 있도록 O\'Hare이됩니다. 데이터베이스에서 검색 할 때 값은 원래 O'Hare이어야합니다.

아포스트로피가 '손실'되면 프로그램 논리의 다른 부분에서 오류가 발생할 가능성이 있습니다.

다른 옵션은 MySQL 라이브러리를 사용하여 데이터베이스에 액세스하기 위해 MySQLi 또는 PDO 라이브러리로 전환하는 것입니다. 후자의 두 가지는 준비된 진술을 지원합니다. 준비된 문은 일반적으로 데이터베이스를 쿼리하는 최상의 방법이라고 생각됩니다.

+0

왜 downvote? – Jacco

+0

+1; @ 재 코 : 왜냐하면 이것은 * niiiii * 같은 사이트입니다 ... –

+1

+1 PDO를 가리키는 사람들을 위해. 진심으로, 오래된 MySQL의 lib 디렉토리는 90 년대입니다 : D 조 –

0

mysql_real_escape_string() 아포스트로피가 제거되지 않습니다.

문제는 출력 쪽에서 발생하거나 다른 기능이 입력을 망칠 가능성이 있습니다.

0

mysql_real_escape_string을 사용하기 전에 데이터베이스 연결을 열어야합니다. 그렇지 않으면 오작동합니다.