>  기사  >  백엔드 개발  >  PHP 언어 개발에서 명령 주입 보안 위험을 방지하는 방법

PHP 언어 개발에서 명령 주입 보안 위험을 방지하는 방법

WBOY
WBOY원래의
2023-06-09 18:32:451294검색

인터넷 기술의 급속한 발전과 함께 웹 애플리케이션은 우리 일상 생활에서 점점 더 중요한 역할을 해왔습니다. 널리 사용되는 웹 프로그래밍 언어인 PHP는 사이버 공격 활동의 중심이 되기도 했습니다. 그 중 명령 주입 보안 위험은 PHP가 직면한 중요한 위협입니다. 이 기사에서는 PHP 개발에서 이러한 보안 위험을 피하는 방법에 대한 몇 가지 방법을 소개합니다.

1. 명령 주입 공격이란?

명령 주입 공격은 해커가 웹 응용 프로그램의 입력 매개 변수를 통해 웹 응용 프로그램에 악성 시스템 명령을 주입하고 이를 실행하는 것을 말합니다. 명령어 주입 공격은 해커가 웹 애플리케이션의 서버를 제한 없이 직접 제어할 수 있어 서버에 대한 완전한 제어권을 얻을 수 있는 매우 위험한 공격 방법이다.

2. 명령 주입 공격의 두 가지 형태

명령 주입 공격은 실제 공격에서 두 가지 형태로 나눌 수 있습니다. 하나는 웹 애플리케이션의 입력 매개변수를 직접 이용해 공격하는 것이고, 다른 하나는 다른 수단을 통해 시스템 권한을 얻은 뒤 공격하는 것이다.

  1. 웹 애플리케이션의 입력 매개 변수를 직접 사용하여 공격

사용자가 POST 또는 GET을 통해 웹 애플리케이션에 데이터를 제출하면 해커는 시스템 명령이 포함된 일부 문자열을 데이터에 삽입하여 웹 애플리케이션이 다음을 수행하도록 허용할 수 있습니다. 프로그램은 실행될 때 이러한 악성 명령을 실행합니다. 예를 들어 일반적인 명령 주입 공격에 대한 샘플 코드는 다음과 같습니다.

mysql_query("SELECT * FROM user WHERE name = '".$_POST['name']."' AND password = '".$_POST['password']."'");

사용자가 로그인하기 위해 양식을 통해 사용자 이름과 비밀번호를 입력하면 해커는 다음과 같이 악성 시스템 명령이 포함된 문자열을 양식에 주입할 수 있습니다. 아래 표시:

a' OR 1=1; DROP TABLE user;#

이 명령은 SQL 쿼리를 실행할 때 웹 애플리케이션이 "OR" 작업을 수행하고 "user"라는 테이블을 삭제하도록 합니다.

  1. 다른 수단을 통해 시스템 권한을 얻은 후 공격

해커는 웹 애플리케이션의 다른 취약점을 악용하거나 서버 비밀번호를 직접 크래킹하는 등 다른 방법을 통해 시스템 권한을 얻을 수 있습니다. 해커가 시스템 권한을 얻으면 명령 주입 공격을 통해 서버를 직접 제어할 수 있습니다. 예를 들어 해커는 다음 명령을 통해 간단한 명령 주입 공격을 수행할 수 있습니다.

system(“rm -rf /”);

이 명령은 서버의 모든 파일과 디렉터리를 삭제하여 매우 심각한 손실을 초래합니다.

3. 명령 주입 공격을 피하는 방법

명령 주입 공격에 대한 기본 지식을 습득한 후 다음 방법을 통해 이러한 보안 위험을 피할 수 있습니다.

  1. 준비된 문 사용

전처리된 문은 안전한 SQL 쿼리입니다. SQL 주입 공격, Command 주입 공격을 방지하고 애플리케이션 성능을 향상시킬 수 있는 방법입니다. 준비된 명령문은 PDO 또는 MySQLi와 같은 확장 라이브러리를 사용하여 구현할 수 있습니다.

예를 들어 다음은 PDO 준비된 문을 사용하여 SQL 쿼리를 실행하는 샘플 코드입니다.

$pdo = new PDO(‘mysql:host=hostname;dbname=database_name;’, ‘username’, ‘password’);
$stmt = $pdo->prepare(‘SELECT name FROM user WHERE email = :email’);
$stmt->execute(array(‘email’ => $email));
  1. 입력 데이터 필터링 및 유효성 검사

프로그램 로직을 구현하기 전에 처리된 데이터를 필터링하고 유효성을 검사해야 합니다. intval(), floatval(), trim()과 같은 PHP 내장 함수와 기타 함수를 사용하여 데이터를 필터링하고 확인할 수 있습니다. . intval()floatval()trim()等函数来过滤和验证数据。

例如,以下示例代码演示了如何使用filter_input()函数来过滤和验证输入数据:

$name = filter_input(INPUT_POST, ‘name’, FILTER_SANITIZE_STRING);
$email = filter_input(INPUT_POST, ‘email’, FILTER_VALIDATE_EMAIL);
$password = filter_input(INPUT_POST, ‘password’, FILTER_SANITIZE_SPECIAL_CHARS);
  1. 对系统命令进行严格的输入验证和过滤

在执行系统命令之前,必须对输入的命令进行严格的验证和过滤。可以使用一些可信的命令行参数来限制输入。

例如,以下示例代码演示了如何使用escapeshellcmd()

예를 들어, 다음 샘플 코드는 filter_input() 함수를 사용하여 입력 데이터를 필터링하고 검증하는 방법을 보여줍니다.
    $command = escapeshellcmd($_POST['command']);
    $output = shell_exec($command);
    1. 엄격한 입력 검증 및 시스템 필터링 명령

    시스템 명령을 실행하기 전에 입력된 명령을 엄격하게 검증하고 필터링해야 합니다. 신뢰할 수 있는 명령줄 매개변수를 사용하여 입력을 제한할 수 있습니다.

    예를 들어, 다음 샘플 코드는 escapeshellcmd() 함수를 사용하여 명령줄 인수를 필터링하는 방법을 보여줍니다.

    $allowed_types = array('png', 'jpg', 'gif');
    $file_type = substr(strrchr($_FILES['file']['name'], '.'), 1);
    if(!in_array($file_type, $allowed_types)) {
        die("Invalid file type.");
    }
    if ($_FILES['file']['size'] > 1000000) {
        die("File size too large.");
    }

    보안 파일 시스템 액세스 제어 및 파일 업로드 처리 사용 🎜🎜🎜In In 웹 애플리케이션에서는 사용자가 파일을 업로드할 수 있으므로 특별한 주의가 필요합니다. 해커가 파일을 업로드하여 CSS 및 명령 주입 공격을 수행할 수 있기 때문입니다. 따라서 파일 업로드 처리 시 파일 형식과 크기를 확인해야 하며, 업로드된 파일은 웹 서버 외부의 독립된 파일 시스템에 저장해야 합니다. 🎜🎜예를 들어, 다음 샘플 코드는 업로드된 파일을 확인하고 필터링하는 방법을 보여줍니다. 🎜rrreee🎜위는 PHP 개발에서 명령 주입 공격을 피하기 위한 몇 가지 방법입니다. 개발자는 이러한 방법을 합리적으로 사용하면 웹을 크게 향상시킬 수 있습니다. 애플리케이션. 🎜

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

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