>  기사  >  백엔드 개발  >  PHP 개발에서 SQL 주입 공격을 방지하는 방법

PHP 개발에서 SQL 주입 공격을 방지하는 방법

WBOY
WBOY원래의
2023-06-27 20:53:371281검색

PHP 개발 시 SQL 주입 공격을 방지하는 방법

SQL 주입 공격은 웹 애플리케이션에서 SQL 문을 동적으로 구성한 다음 이러한 SQL 문을 데이터베이스에서 실행하여 공격자가 악의적인 작업을 수행하거나 민감한 데이터를 얻을 수 있는 공격 방법입니다. 이 공격 방법의 경우 개발자는 웹 애플리케이션의 보안을 보장하기 위한 보호 조치를 취해야 합니다. 이 기사에서는 PHP 개발에서 SQL 주입 공격을 방지하는 방법을 소개합니다.

  1. 매개변수 바인딩

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();
  1. String escape

사용자 입력 데이터를 데이터베이스에 저장하기 전에 이스케이프 기능을 사용하여 문자열을 이스케이프해야 합니다. 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);
  1. 입력 확인

입력 확인은 입력이 적법하고 예상 유형 및 형식을 준수하는지 확인하기 위해 입력 매개변수를 필터링하고 검증하는 것을 의미합니다. 이 접근 방식을 사용하면 잠재적인 SQL 주입 취약점을 피할 수 있습니다. 예를 들어, 쿼리의 매개변수가 숫자인 경우 is_numeric() 함수를 사용하여 숫자인지 확인할 수 있습니다. 쿼리의 매개변수가 문자열인 경우 ctype_alpha() 함수를 사용하여 문자만 포함되어 있는지 확인할 수 있습니다.

//对用户输入进行检查
if (is_numeric($_GET['id'])) {
    $id = $_GET['id'];
    
    //查询数据库
    $sql = "SELECT * FROM users WHERE id = $id";
    mysql_query($sql);
}
  1. 데이터베이스 권한 제어

웹 애플리케이션을 개발할 때 특정 계정과 권한을 사용하여 데이터베이스에 연결할 수 있습니다. 필요한 데이터 및 작업만 승인되도록 계정 및 권한을 설정할 때 신중하게 고려해야 합니다. 예를 들어 읽기 전용 계정은 INSERT, UPDATE 및 DELETE 작업을 수행할 수 없으므로 SQL 주입 공격의 위험이 크게 줄어듭니다.

요약:

이 기사에서는 매개변수 바인딩, 문자열 이스케이프, 입력 확인 및 데이터베이스 권한 제어를 포함하여 PHP 개발에서 SQL 주입 공격을 방지하는 네 가지 방법을 소개합니다. 개발자는 애플리케이션 시나리오와 웹 애플리케이션의 보안을 보장해야 하는 필요성에 따라 적절한 보호 조치를 선택해야 합니다. 동시에 PHP 버전을 업그레이드하고 적시에 데이터베이스 소프트웨어를 업데이트하는 것도 SQL 주입 공격을 예방하는 효과적인 수단입니다.

위 내용은 PHP 개발에서 SQL 주입 공격을 방지하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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