> 데이터 베이스 > MySQL 튜토리얼 > 매개변수화된 쿼리는 SQL 삽입으로부터 어떻게 보호합니까?

매개변수화된 쿼리는 SQL 삽입으로부터 어떻게 보호합니까?

Mary-Kate Olsen
풀어 주다: 2024-10-29 10:54:02
원래의
576명이 탐색했습니다.

How Do Parameterized Queries Protect Against SQL Injection?

보안 데이터베이스 상호 작용을 위해 매개 변수화된 쿼리 사용

SQL 주입은 여전히 ​​심각한 보안 위협으로 남아 있으며 공격자가 사용자가 제출한 입력을 사용하여 악의적인 쿼리를 실행할 수 있습니다. . 웹사이트를 보호하기 위해 매개변수화된 쿼리는 강력한 솔루션을 제공합니다. 그러나 이를 통합하려면 적절한 데이터베이스 연결 처리가 필요합니다.

다음 로그인 페이지 코드 예시를 고려하세요.

<code class="php">$userName = $_POST["username"];
$userPass = $_POST["password"];

$query = "SELECT * FROM users WHERE username = '$userName' AND password = '$userPass'";

$result = mysqli_query($dbc, $query); //$dbc is for MySQL connection: $dbc = @mysqli_connect($dbhost, $dbuser, $dbpass, $db)

$row = mysqli_fetch_array($result);

if(!$row){
    echo "No existing user or wrong password.";
}</code>
로그인 후 복사

매개변수화된 쿼리 구현:

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(): 매개변수화된 쿼리 문을 준비합니다.
  • mysqli_stmt_bind_param(): 입력 값을 자리 표시자(?)에 바인딩합니다.
  • mysqli_stmt_execute(): 준비된 쿼리를 실행합니다.
  • mysqli_stmt_fetch(): 결과 행.

연결 처리:

원본 코드에서는 mysqli_connect()를 사용하여 데이터베이스에 대한 연결이 설정됩니다. 쿼리를 실행하기 전에 이 작업을 수행해야 합니다. 계속하기 전에 유효한 $dbc가 있는지 확인하세요.

보안 모범 사례:

  • 비밀번호를 데이터베이스에 저장하기 전에 해시하거나 암호화하세요.
  • 악의적인 문자를 방지하기 위해 사용자 입력을 검증합니다.
  • 사용자 제공 데이터와 관련된 모든 데이터베이스 상호 작용에 대해 준비된 명령문을 일관되게 사용합니다.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿