>  기사  >  백엔드 개발  >  `mysql_real_escape_string()` 및 `mysql_escape_string()`을 사용하면 애플리케이션을 보호하기에 충분합니까?

`mysql_real_escape_string()` 및 `mysql_escape_string()`을 사용하면 애플리케이션을 보호하기에 충분합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-03 10:58:03569검색

Is Using `mysql_real_escape_string()` and `mysql_escape_string()` Enough to Secure Your Application?

mysql_real_escape_string() 및 mysql_escape_string()이 앱 보안에 충분합니까?

이러한 함수는 SQL 삽입 및 기타 공격에 대해 어느 정도 보호를 제공할 수 있습니다. , 특정 취약점을 해결하지 못합니다.

SQL 주입

Mysql_real_escape_string()은 쿼리 내에서 PHP 변수를 부적절하게 처리하는 경우 여전히 응용 프로그램을 SQL 주입에 노출시킬 수 있습니다. 다음 예를 고려하십시오.

$sql = "SELECT number FROM PhoneNumbers WHERE " . 
        mysql_real_escape_string($field) . " = " . mysql_real_escape_string($value);  

mysql_real_escape_string()은 테이블 이름, 열 이름 또는 LIMIT 필드를 보호하도록 설계되지 않았기 때문에 공격자가 이 쿼리를 조작하여 승인되지 않은 SQL 문을 실행할 수 있습니다.

Like 공격

Mysql_real_escape_string()은 LIKE 공격을 방지하기에는 충분하지 않습니다. 공격자는 "%%"와 같은 악성 값을 입력하여 모든 레코드를 반환할 수 있으며 잠재적으로 민감한 정보를 손상시킬 수 있습니다.

Charset Exploits

특정 브라우저는 charset에 취약할 수 있습니다. 익스플로잇을 통해 공격자는 이스케이프 메커니즘을 우회하고 임의의 SQL 명령을 실행하는 악성 문자를 주입할 수 있습니다.

준비된 명령문: 종합 솔루션

애플리케이션을 효과적으로 보호하려면 mysql_real_escape_string() 대신 준비된 명령문을 사용하는 것이 좋습니다. 준비된 문은 사용자가 제공한 값을 매개변수로 바인딩하여 SQL 쿼리를 실행합니다. 이렇게 하면 수동 이스케이프가 필요 없으며 승인된 SQL만 실행됩니다.

다음은 PHP에서 준비된 문을 사용하는 예입니다.

$pdo = new PDO($dsn);

$column = 'url';
$value = 'http://www.example.com/';
$limit = 1;

// Validate the search parameter column.
$validColumns = array('url', 'last_fetched');
if (!in_array($column, $validColumns)) { $column = 'id'; }

$statement = $pdo->prepare('SELECT url FROM GrabbedURLs ' .
                           'WHERE ' . $column . '=? ' .
                           'LIMIT ' . intval($limit));
$statement->execute(array($value));
while (($data = $statement->fetch())) { }

준비된 문은 다음을 통해 사전 방어 메커니즘을 제공합니다. 기본 데이터베이스 서버의 보안 기능을 활용합니다. 알려진 공격과 알려지지 않은 공격 모두에 대해 본질적으로 저항력이 있어 데이터 무결성을 보장합니다.

위 내용은 `mysql_real_escape_string()` 및 `mysql_escape_string()`을 사용하면 애플리케이션을 보호하기에 충분합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.