PHP 개발 시 SQL 주입 공격을 방지하는 방법
SQL 주입 공격은 웹 애플리케이션에서 SQL 문을 동적으로 구성한 다음 이러한 SQL 문을 데이터베이스에서 실행하여 공격자가 악의적인 작업을 수행하거나 민감한 데이터를 얻을 수 있는 공격 방법입니다. 이 공격 방법의 경우 개발자는 웹 애플리케이션의 보안을 보장하기 위한 보호 조치를 취해야 합니다. 이 기사에서는 PHP 개발에서 SQL 주입 공격을 방지하는 방법을 소개합니다.
PHP에서는 PDO 또는 mysqli 확장 라이브러리를 사용하여 매개변수 바인딩을 구현하고 SQL 문과 입력 매개변수를 별도로 실행할 수 있습니다. 이 방법을 사용하면 매개변수에 SQL 예외 문자 및 명령문이 포함되는 것을 방지하고 내부 SQL 주입 공격을 방지할 수 있습니다.
PDO를 예로 들면 코드는 다음과 같습니다.
//准备SQL语句 $sql = "SELECT name, age, email FROM user WHERE id = :id AND age > :age"; $stmt = $pdo->prepare($sql); //绑定参数 $stmt->bindParam(':id', $id, PDO::PARAM_INT); $stmt->bindParam(':age', $age, PDO::PARAM_INT); //执行查询语句 $stmt->execute();
사용자 입력 데이터를 데이터베이스에 저장하기 전에 이스케이프 기능을 사용하여 문자열을 이스케이프해야 합니다. PHP에서는 mysql_real_escape_string() 및 mysqli_real_escape_string() 함수를 사용하여 탈출할 수 있습니다. 이 방법은 낮은 수준의 예방 조치이므로 다른 안전한 보호 조치와 함께 사용하는 것이 좋습니다.
코드 예:
//获取用户输入 $username = $_POST['username']; $password = $_POST['password']; //转义字符串 $username = mysql_real_escape_string($username); $password = mysql_real_escape_string($password); //准备SQL,然后查询 $sql = "SELECT * FROM users WHERE username = '$username' AND password = '$password'"; mysql_query($sql);
입력 확인은 입력이 적법하고 예상 유형 및 형식을 준수하는지 확인하기 위해 입력 매개변수를 필터링하고 검증하는 것을 의미합니다. 이 접근 방식을 사용하면 잠재적인 SQL 주입 취약점을 피할 수 있습니다. 예를 들어, 쿼리의 매개변수가 숫자인 경우 is_numeric() 함수를 사용하여 숫자인지 확인할 수 있습니다. 쿼리의 매개변수가 문자열인 경우 ctype_alpha() 함수를 사용하여 문자만 포함되어 있는지 확인할 수 있습니다.
//对用户输入进行检查 if (is_numeric($_GET['id'])) { $id = $_GET['id']; //查询数据库 $sql = "SELECT * FROM users WHERE id = $id"; mysql_query($sql); }
웹 애플리케이션을 개발할 때 특정 계정과 권한을 사용하여 데이터베이스에 연결할 수 있습니다. 필요한 데이터 및 작업만 승인되도록 계정 및 권한을 설정할 때 신중하게 고려해야 합니다. 예를 들어 읽기 전용 계정은 INSERT, UPDATE 및 DELETE 작업을 수행할 수 없으므로 SQL 주입 공격의 위험이 크게 줄어듭니다.
요약:
이 기사에서는 매개변수 바인딩, 문자열 이스케이프, 입력 확인 및 데이터베이스 권한 제어를 포함하여 PHP 개발에서 SQL 주입 공격을 방지하는 네 가지 방법을 소개합니다. 개발자는 애플리케이션 시나리오와 웹 애플리케이션의 보안을 보장해야 하는 필요성에 따라 적절한 보호 조치를 선택해야 합니다. 동시에 PHP 버전을 업그레이드하고 적시에 데이터베이스 소프트웨어를 업데이트하는 것도 SQL 주입 공격을 예방하는 효과적인 수단입니다.
위 내용은 PHP 개발에서 SQL 주입 공격을 방지하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!