>  기사  >  백엔드 개발  >  SQL 주입 공격을 방지하기 위한 PHP 프로그래밍 팁

SQL 주입 공격을 방지하기 위한 PHP 프로그래밍 팁

WBOY
WBOY원래의
2023-07-09 21:18:121267검색

SQL 주입 공격 방지를 위한 PHP 프로그래밍 팁

소개:
SQL 주입은 일반적인 웹 애플리케이션 공격 방법입니다. 공격자는 사용자가 입력한 데이터에 악의적인 SQL 코드를 삽입하여 데이터베이스에 불법적으로 액세스하거나 실행합니다. . SQL 주입 공격으로부터 애플리케이션을 보호하려면 사용자가 입력한 데이터를 필터링, 이스케이프 및 검증하는 프로그래밍 기술을 채택해야 합니다. 이 기사에서는 SQL 주입 공격을 방지하는 데 도움이 되는 몇 가지 일반적인 PHP 프로그래밍 기술에 대해 설명합니다.

  1. Prepared 문 사용
    Prepared 문은 SQL 삽입을 방지하는 PHP의 강력한 도구입니다. 입력된 데이터가 적절하게 이스케이프되어 SQL 코드의 일부가 아닌 데이터로 처리되도록 보장합니다. 다음은 준비된 문을 사용하는 예입니다.
$mysqli = new mysqli("localhost", "username", "password", "database");

if($mysqli->connect_error) {
    die("连接数据库失败: " . $mysqli->connect_error);
}

$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ? AND password = ?");
$stmt->bind_param("ss", $username, $password);

$username = $_POST['username'];
$password = $_POST['password'];

$stmt->execute();
$result = $stmt->get_result();

while($row = $result->fetch_assoc()) {
    // 处理结果集
}

$stmt->close();
  1. 매개변수화된 쿼리 사용
    준비된 문과 마찬가지로 매개변수화된 쿼리도 SQL 삽입 공격을 방지할 수 있습니다. PDO 라이브러리를 사용하여 매개변수화된 쿼리를 수행할 수 있습니다. 다음은 매개변수화된 쿼리를 사용하는 예입니다.
$dsn = 'mysql:host=localhost;dbname=database';
$username = 'username';
$password = 'password';

try {
    $pdo = new PDO($dsn, $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch(PDOException $e) {
    die("连接数据库失败:" . $e->getMessage());
}

$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username AND password = :password");
$stmt->bindParam(':username', $username);
$stmt->bindParam(':password', $password);

$username = $_POST['username'];
$password = $_POST['password'];

$stmt->execute();
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

foreach($result as $row) {
    // 处理结果集
}

$stmt->closeCursor();
  1. 입력 유효성 검사 및 필터링
    준비된 문과 매개변수화된 쿼리를 사용하는 것 외에도 사용자 입력의 유효성 검사 및 필터링도 수행해야 합니다. 이는 악의적인 입력을 감지하고 차단하는 데 도움이 됩니다. 다음은 사용자 입력을 검증하고 필터링하는 예입니다.
$username = $_POST['username'];
$password = $_POST['password'];

if(!empty($username) && !empty($password)) {
    // 验证用户名和密码是否符合要求,如长度、字符等
    // ...
    
    // 过滤特殊字符
    $username = filter_var($username, FILTER_SANITIZE_STRING);
    $password = filter_var($password, FILTER_SANITIZE_STRING);
    
    // 执行SQL查询
    // ...
} else {
    die("用户名和密码不能为空");
}

요약:
SQL 주입 공격을 방지하려면 사용자가 입력한 데이터를 필터링, 이스케이프 및 검증하는 단계를 수행해야 합니다. 준비된 문과 매개변수화된 쿼리를 사용하면 SQL 주입 공격을 효과적으로 방지할 수 있습니다. 동시에 입력 검증과 필터링도 중요한 방어 수단입니다. 이러한 PHP 프로그래밍 팁을 사용하면 애플리케이션의 보안을 향상하고 사용자 정보와 데이터베이스 보안을 보호할 수 있습니다.

위 내용은 SQL 주입 공격을 방지하기 위한 PHP 프로그래밍 팁의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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