>  기사  >  백엔드 개발  >  PHP 언어 개발에서 SQL 키워드 삽입 공격을 피하는 방법은 무엇입니까?

PHP 언어 개발에서 SQL 키워드 삽입 공격을 피하는 방법은 무엇입니까?

WBOY
WBOY원래의
2023-06-10 17:41:511271검색

인터넷이 발달하면서 SQL 주입 공격은 네트워크 보안에 심각한 문제가 되었습니다. SQL 인젝션 공격은 공격자가 웹 애플리케이션의 취약점을 이용해 악의적인 SQL 문을 서버에 제출하여 불법적인 접근을 달성하고 민감한 데이터를 훔치는 공격 방법을 말합니다. 웹 개발에서 가장 널리 사용되는 프로그래밍 언어 중 하나인 PHP 언어 역시 SQL 주입 공격의 위험에 직면해 있습니다. 이번 글에서는 PHP 언어 개발에서 SQL 키워드 인젝션 공격을 피하는 방법을 소개하겠습니다.

1. SQL 주입 공격 이해

SQL 주입 공격을 예방하기 전에 먼저 SQL 주입 공격의 기본 개념과 원리를 이해해야 합니다. SQL 주입 공격은 주로 웹 애플리케이션을 사용하여 사용자 입력 데이터를 잘못 필터링하고 사용자 입력을 SQL 문의 일부로 백엔드 데이터베이스에 직접 전달하므로 공격자가 악의적인 SQL 문을 통해 데이터베이스를 공격하고 제어할 수 있습니다. 예를 들어 다음 코드 조각은 SQL 주입 공격의 위험이 있을 수 있습니다.

<?php
//连接数据库
$con=mysqli_connect("localhost","username","password","my_db");

//获取用户提交的用户名和密码
$username=$_POST['username'];
$password=$_POST['password'];

//构造SQL语句
$sql="SELECT * FROM users WHERE username='".$username."' AND password='".$password."'";

//执行SQL语句
$result=mysqli_query($con,$sql);

// 输出查询结果
while($row=mysqli_fetch_array($result,MYSQLI_ASSOC)){
    echo $row['username']. " " . $row['password'];
}

//关闭数据库连接
mysqli_close($con);
?>

위 코드에서 사용자가 제출한 데이터는 SQL 문의 일부로 SQL 데이터베이스에 직접 전달될 수 있으며 공격자는 다음을 사용할 수 있습니다. 데이터베이스에 데이터를 주입하는 수단입니다. 악의적인 SQL 문을 전달하여 데이터베이스를 공격하고 제어합니다. 예를 들어, 사용자가 제출한 비밀번호가 "123' OR 1=1--"인 경우 데이터베이스는 다음 SQL 문을 실행합니다.

SELECT * FROM users WHERE username='user' AND password='123' OR 1=1--'

이 SQL 문은 " 1=1" 항상 참입니다.

2. SQL 주입 공격을 방지하는 방법

SQL 주입 공격을 방지하려면 공격으로부터 웹 애플리케이션을 보호하기 위한 몇 가지 조치를 취해야 합니다. 다음은 몇 가지 일반적인 방법입니다.

  1. 매개변수화된 쿼리 사용

매개변수화된 쿼리는 SQL 주입 공격을 방지하는 효과적인 방법입니다. 이 방법은 미리 정의된 SQL 문과 매개 변수를 사용하고 실행을 위해 매개 변수 값을 데이터베이스에 입력으로 전달합니다. 이 방법을 사용하면 사용자가 입력한 데이터가 SQL문으로 직접 스플라이싱되는 것을 방지할 수 있어 SQL 인젝션 공격으로부터 웹 애플리케이션을 보호할 수 있다. 예를 들어 다음 코드는 매개변수화된 쿼리를 사용합니다.

<?php
//连接数据库
$con=mysqli_connect("localhost","username","password","my_db");

//获取用户提交的用户名和密码
$username=$_POST['username'];
$password=$_POST['password'];

//构造SQL语句
$sql="SELECT * FROM users WHERE username=? AND password=?";

//创建预处理语句
$stmt=mysqli_prepare($con,$sql);

//绑定参数值
mysqli_stmt_bind_param($stmt,"ss",$username,$password);

//执行SQL语句
mysqli_stmt_execute($stmt);

// 迭代查询结果
$result=mysqli_stmt_get_result($stmt);
while($row=mysqli_fetch_array($result,MYSQLI_ASSOC)){
    echo $row['username']. " " . $row['password'];
}

//关闭数据库连接
mysqli_close($con);
?>
  1. 입력 데이터 필터링

사용자 입력 데이터를 처리하기 전에 필터링하여 안전성을 보장할 수 있습니다. 예를 들어, PHP의 내장 함수인 Strip_tags(), addlashes() 등을 사용하여 사용자 입력 데이터를 필터링할 수 있습니다. 이러한 기능은 사용자 입력에서 HTML 태그를 필터링하고 특수 문자를 이스케이프하는 등의 작업을 수행하여 SQL 주입 공격의 위험을 줄일 수 있습니다. 예:

<?php
//连接数据库
$con=mysqli_connect("localhost","username","password","my_db");

//获取用户提交的用户名和密码
$username=$_POST['username'];
$password=$_POST['password'];

//过滤用户输入数据
$username=mysqli_real_escape_string($con,strip_tags($username));
$password=mysqli_real_escape_string($con,strip_tags($password));

//构造SQL语句
$sql="SELECT * FROM users WHERE username='".$username."' AND password='".$password."'";

//执行SQL语句
$result=mysqli_query($con,$sql);

// 输出查询结果
while($row=mysqli_fetch_array($result,MYSQLI_ASSOC)){
    echo $row['username']. " " . $row['password'];
}

//关闭数据库连接
mysqli_close($con);
?>

위 코드에서는 mysqli_real_escape_string() 및 Strip_tags() 함수를 사용하여 사용자 입력 데이터를 필터링하고 보안을 보장합니다.

3. 요약

SQL 주입 공격은 웹 애플리케이션에서 흔히 발생하는 보안 문제로, 데이터베이스와 사용자 데이터에 막대한 손실을 초래할 수 있습니다. SQL 주입 공격을 방지하려면 입력 데이터의 정확성을 보장하고, 사용자 입력 데이터를 필터링하고, 매개변수화된 쿼리 및 기타 방법을 사용하여 웹 애플리케이션의 보안을 강화해야 합니다. 개발자로서 우리는 웹 애플리케이션의 보안을 보장하기 위해 최신 보안 기술을 끊임없이 배우고 이해해야 합니다.

위 내용은 PHP 언어 개발에서 SQL 키워드 삽입 공격을 피하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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