>백엔드 개발 >PHP 튜토리얼 >SQL 인젝션을 방지하는 PHP 구현 기술

SQL 인젝션을 방지하는 PHP 구현 기술

WBOY
WBOY원래의
2023-06-23 12:02:422226검색

SQL 인젝션은 공격자의 SQL 쿼리에 악의적인 입력을 삽입하여 애플리케이션의 보안 검증을 우회하는 일반적인 공격 방법입니다. 이러한 유형의 공격은 PHP가 널리 사용되는 프로그래밍 언어인 웹 애플리케이션에서 흔히 볼 수 있습니다. PHP에서 애플리케이션 프로그래머는 다음 기술을 사용하여 SQL 삽입을 방지할 수 있습니다.

  1. Prepared 문 사용

PHP에서는 SQL 삽입을 방지하는 안전한 방법인 준비된 문이라는 기술을 제공합니다. 준비된 문은 SQL 쿼리를 실행하기 전에 쿼리 문자열과 쿼리 매개 변수를 분리하는 기술입니다. 이 기술을 사용하면 공격자는 쿼리 매개변수에 악성 코드를 삽입할 수 없으므로 공격으로부터 애플리케이션을 보호할 수 있습니다. 다음은 준비된 문의 예입니다.

$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);
$stmt->execute();

이 예에서 SQL 쿼리 문자열은 "SELECT * FROM users WHERE 사용자 이름 = ? AND 비밀번호 = ?"이고 $username 및 $password는 준비된 문의 매개 변수입니다. Bind_param() 함수는 변수를 준비된 문의 매개변수에 바인딩하는 데 사용됩니다. 이렇게 하면 입력된 매개변수가 무엇이든 무시되고 쿼리에서 안전하게 전달됩니다.

  1. 입력 유효성 검사 수행

입력 유효성 검사는 SQL 주입을 방지하는 강력한 수단입니다. 사용자가 입력한 데이터가 예상되는 유형, 형식, 길이와 일치하는지 확인하는 기술입니다. PHP에서는 정규식이나 필터 함수를 사용하여 입력의 유효성을 검사할 수 있습니다. 예:

if (!preg_match("/^[a-zA-Z0-9]{8,}$/", $password)) {
    echo "Invalid password format";
    exit;
}

이 예에서 preg_match() 함수는 정규 표현식을 사용하여 비밀번호 형식이 유효한지 확인합니다. 유효하지 않은 경우 프로그램은 오류 메시지를 표시하고 종료됩니다.

  1. 입력 탈출

PHP에서는 mysqli_real_escape_string() 또는 addlashes() 함수를 사용하여 사용자 입력을 탈출할 수 있습니다. 이러한 함수는 SQL 주입 공격을 방지하기 위해 특수 문자(예: 작은따옴표 및 큰따옴표)를 이스케이프 문자로 변환합니다. 예:

$username = mysqli_real_escape_string($mysqli, $_POST['username']);
$password = mysqli_real_escape_string($mysqli, $_POST['password']);

or

$username = addslashes($_POST['username']);
$password = addslashes($_POST['password']);

이 예에서 mysqli_real_escape_string() 함수는 $post['username'] 및 $post['password'] 입력 값을 이스케이프하는 데 사용됩니다. 백슬래시 문자는 작은따옴표나 큰따옴표가 SQL 쿼리에서 닫는 따옴표로 해석되는 것을 방지합니다. addlashes() 함수도 비슷한 작업을 수행하며 특수 문자를 이스케이프합니다.

요약하자면, SQL 주입 공격을 방지하려면 프로그래머는 준비된 명령문, 입력 유효성 검사 및 이스케이프 기술을 사용해야 합니다. 이러한 기술을 사용하면 공격자가 악용할 수 있는 취약성과 결함을 줄일 수 있습니다. 동시에 애플리케이션 개발자는 애플리케이션 보안을 향상시키기 위해 SQL 주입의 일반적인 공격 방법을 이해해야 합니다.

위 내용은 SQL 인젝션을 방지하는 PHP 구현 기술의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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