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

PHP의 매개변수화된 쿼리는 MySQL 데이터베이스의 SQL 주입으로부터 어떻게 보호할 수 있습니까?

Linda Hamilton
Linda Hamilton원래의
2024-11-02 07:07:30343검색

How can Parameterized Queries in PHP Protect against SQL Injection in MySQL Databases?

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

SQL 주입은 데이터베이스 애플리케이션의 민감한 데이터를 손상시킬 수 있는 지속적인 보안 위협으로 남아 있습니다. 매개변수화된 쿼리는 이러한 위험을 완화하는 데 중요한 기술입니다. 그러나 이를 올바르게 구현하려면 쿼리 자체뿐만 아니라 데이터베이스 연결 프로세스도 이해해야 합니다.

PHP 로그인 페이지에서 다음 코드 조각을 고려하세요.

<code class="php">$query = "SELECT * FROM users WHERE username = '$userName' AND password = '$userPass'";
$result = mysqli_query($dbc, $query);
$row = mysqli_fetch_array($result);</code>

이 코드는 다음에 취약합니다. 사용자가 제공한 입력인 $userName 및 $userPass가 쿼리 문자열에 직접 포함되어 있기 때문에 SQL 주입입니다.

매개변수화된 쿼리를 구현하려면 이 코드를 다음으로 바꾸세요.

<code class="php">$stmt = mysqli_prepare($dbc, "SELECT * FROM users WHERE username = ? AND password = ?");
mysqli_stmt_bind_param($stmt, "ss", $userName, $userPass);
mysqli_stmt_execute($stmt);
$row = mysqli_stmt_fetch($stmt);</code>

여기서 향상된 코드:

  • mysqli_prepare는 여러 번 실행될 수 있는 PDO 문 개체를 준비합니다.
  • mysqli_stmt_bind_param은 사용자가 제공한 입력을 SQL 쿼리의 매개변수화된 자리 표시자(?)에 바인딩하여 SQL 주입.
  • mysqli_stmt_execute는 준비된 명령문을 실행합니다.
  • mysqli_stmt_fetch는 결과 행을 검색합니다.

보안 강화를 위해 사용자 비밀번호를 암호화하거나 해시해야 합니다. 이러한 추가 조치와 함께 매개변수화된 쿼리는 PHP 애플리케이션에서 안전한 MySQL 데이터베이스 상호 작용을 보장합니다.

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

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