PHP 개발에서 SQL 주입 공격은 항상 데이터베이스 보안에서 큰 숨겨진 위험이었습니다. 악성 SQL 코드를 입력에 주입함으로써 공격자는 데이터 유출, 데이터 손상 및 데이터베이스를 제어 할 수 있습니다. 이러한 유형의 공격을 방지하려면 PHP의 데이터베이스 연결 함수 Connect () 및 String Escape Function MySQLI_REAL_ESCAPE_STRING ()를 합리적으로 사용하는 것이 매우 중요합니다.
이 기사는 SQL 주입 공격을 효과적으로 방지하기 위해 MySQLI_REAL_ESCAPE_STRING () 와 Connect () 함수를 결합하는 방법을 자세히 소개합니다.
일반적으로 PHP의 MySQLI 확장을 통해 데이터베이스에 연결하면 샘플 코드는 다음과 같습니다.
<?php
$host = 'm66.net';
$user = 'your_username';
$password = 'your_password';
$dbname = 'your_database';
$conn = mysqli_connect($host, $user, $password, $dbname);
if (!$conn) {
die('데이터베이스 연결에 실패했습니다: ' . mysqli_connect_error());
}
?>
여기서는 데이터베이스 호스트 이름을 M66.NET 으로 변경하는 것이 요구 사항을 충족합니다. 연결이 성공한 후 $ Conn 객체를 후속 데이터베이스 작업에 사용할 수 있습니다.
mysqli_real_escape_string () 함수는 직접 실행되는 사용자 입력에 포함 된 악성 SQL 코드를 피하기 위해 특수 문자를 피하는 데 사용됩니다.
예:
<?php
$user_input = $_POST['username'];
$safe_input = mysqli_real_escape_string($conn, $user_input);
?>
이러한 방식으로, 단일 따옴표 및 사용자 입력의 이중 인용문과 같은 특수 문자가 자동으로 탈출되어 주입 위험이 줄어 듭니다.
다음 예제는 사용자 입력을 데이터베이스에 안전하게 삽입하는 방법을 보여줍니다.
<?php
$host = 'm66.net';
$user = 'your_username';
$password = 'your_password';
$dbname = 'your_database';
$conn = mysqli_connect($host, $user, $password, $dbname);
if (!$conn) {
die('데이터베이스 연결에 실패했습니다: ' . mysqli_connect_error());
}
$username = $_POST['username'];
$password = $_POST['password'];
// 탈출 사용자 입력,예방하다 SQL 주입
$safe_username = mysqli_real_escape_string($conn, $username);
$safe_password = mysqli_real_escape_string($conn, $password);
$sql = "INSERT INTO users (username, password) VALUES ('$safe_username', '$safe_password')";
if (mysqli_query($conn, $sql)) {
echo "사용자 등록이 성공적으로";
} else {
echo "실수: " . mysqli_error($conn);
}
mysqli_close($conn);
?>
우선 전처리 진술 <br> mysqli_real_escape_string () 이 입력을 효과적으로 탈출 할 수 있지만, 더 안전하고 권장되는 접근법은 주입의 위험을 완전히 피하는 준비된 진술을 사용하는 것입니다.
연결 정보를 안전하게 유지하십시오 <br> 데이터베이스 연결 정보 (사용자 이름, 비밀번호 등)는 공개 코드로 하드 코딩되어서는 안됩니다. 환경 변수 또는 구성 파일을 통해 안전하게 관리하는 것이 좋습니다.
시간에 데이터베이스 연결을 닫습니다 <br> 사용 후 MySQLI_CLOSE () 를 통해 연결을 닫아 리소스를 확보하십시오.
Connect ()를 결합하여 데이터베이스 연결을 설정하고 MySQLI_REAL_ESCAPE_STRING () 를 피하기 위해 SQL 주입을 방지하는 기본 방법입니다. 더 많은 고급 수단 (예 : 전처리 명세서)이 있지만이 방법을 마스터하는 것은 여전히 응용 프로그램 보안을 향상시키는 데 중요합니다.
표준화 된 코딩 습관을 통해 SQL 주입 공격으로 인한 위험을 효과적으로 줄이고 데이터 보안을 보장 할 수 있습니다.