>데이터 베이스 >MySQL 튜토리얼 >MySQL을 사용하는 PHP의 매개변수화된 쿼리는 SQL 주입 공격으로부터 어떻게 보호할 수 있습니까?

MySQL을 사용하는 PHP의 매개변수화된 쿼리는 SQL 주입 공격으로부터 어떻게 보호할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-10-28 19:03:02624검색

How can Parameterized Queries in PHP with MySQL protect against SQL Injection Attacks?

보안 PHP-MySQL 연결을 위한 매개변수화된 쿼리

SQL 주입은 웹 애플리케이션에 대한 심각한 보안 위협을 나타냅니다. 공격자는 SQL 쿼리를 조작하여 중요한 데이터에 무단으로 액세스하거나 데이터베이스 작업을 중단할 수 있습니다. 매개변수화된 쿼리는 이 취약점을 완화하기 위한 효과적인 대책을 제공합니다.

다음은 MySQL을 사용하여 PHP에서 매개변수화된 쿼리를 준비하는 방법을 보여주는 로그인 페이지의 코드 조각입니다.

<code class="php">$dbc = @mysqli_connect($dbhost, $dbuser, $dbpass, $db); // MySQL connection

$userName = $_POST["username"];
$userPass = $_POST["password"];

$stmt = mysqli_prepare($dbc, "SELECT * FROM users WHERE username = ? AND password = ?");
mysqli_stmt_bind_param($stmt, "s", $userName);
mysqli_stmt_bind_param($stmt, "s", $userPass);
mysqli_stmt_execute($stmt);
$row = mysqli_stmt_fetch($stmt);

if (!$row) {
    echo "No existing user or wrong password.";
}</code>

이 코드 mysqli_connect를 사용하여 MySQL 데이터베이스에 대한 연결을 설정하고 연결 식별자를 $dbc에 할당합니다. $userName 및 $userPass 변수는 사용자가 로그인 페이지에서 입력한 사용자 이름과 비밀번호를 받습니다.

mysqli_prepare 함수는 준비된 명령문을 초기화합니다. 실행될 SQL 쿼리가 첫 번째 인수로 전달됩니다. 이 경우 사용자 이름과 비밀번호가 모두 입력 매개변수와 일치하는 사용자 테이블의 모든 행을 검색합니다.

다음으로 mysqli_stmt_bind_param을 사용하여 사용자가 제공한 입력 매개변수인 $userName 및 $userPass를 바인딩합니다. 준비된 명령문의 자리 표시자(?) 코드는 두 매개변수 모두 데이터 유형이 s(문자열)임을 지정합니다.

mysqli_stmt_execute 함수는 준비된 명령문을 실행합니다.

마지막으로 mysqli_stmt_fetch는 결과 세트에서 첫 번째 행을 검색하여 이를 다음에 할당합니다. $row 변수.

이 코드는 매개변수화된 쿼리를 사용하여 악의적인 SQL 문이 실행되지 않도록 하여 SQL 주입 공격으로부터 보호합니다.

보안 강화를 위해 암호화하는 것이 좋습니다. 또는 데이터베이스에 저장하기 전에 사용자의 비밀번호를 해시하십시오.

위 내용은 MySQL을 사용하는 PHP의 매개변수화된 쿼리는 SQL 주입 공격으로부터 어떻게 보호할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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