ホームページ >バックエンド開発 >PHPチュートリアル >PHP 言語開発におけるコマンド インジェクションのセキュリティ リスクを回避する方法
インターネット技術の急速な発展に伴い、Web アプリケーションは私たちの日常生活においてますます重要な役割を果たしています。 PHP は広く使用されている Web プログラミング言語として、サイバー攻撃活動の焦点にもなっています。中でもコマンドインジェクションのセキュリティリスクはPHPが直面する重要な脅威であり、本記事ではPHP開発におけるセキュリティリスクを回避する方法をいくつか紹介します。
1. コマンド インジェクション攻撃とは何ですか?
コマンド インジェクション攻撃とは、ハッカーが Web アプリケーションの入力パラメータを通じて悪意のあるシステム コマンドを Web アプリケーションに挿入し、それを実行することを指します。 Web アプリケーションのサーバー。コマンド インジェクション攻撃は、ハッカーが制限なく Web アプリケーションのサーバーを直接制御し、サーバーを完全に制御できる非常に危険な攻撃方法です。
2. コマンド インジェクション攻撃の 2 つの形態
コマンド インジェクション攻撃は、実際の攻撃では 2 つの形態に分類できます。 1 つは Web アプリケーションの入力パラメータを直接使用して攻撃する方法、もう 1 つは他の手段でシステムの権限を取得して攻撃する方法です。
ユーザーが POST または GET を通じて Web アプリケーションにデータを送信すると、ハッカーは一部のデータを Web アプリケーションに挿入することができます。データ。システム コマンドを含む文字列。これにより、Web アプリケーションが実行時にこれらの悪意のあるコマンドを実行できるようになります。たとえば、一般的なコマンド インジェクション攻撃のサンプル コードは次のようになります。
mysql_query("SELECT * FROM user WHERE name = '".$_POST['name']."' AND password = '".$_POST['password']."'");
ユーザーがフォーム経由でログインするためにユーザー名とパスワードを入力すると、ハッカーは悪意のあるシステム コマンドを含む文字をインジェクトする可能性があります。以下に示すように、文字列形式で指定します。
a' OR 1=1; DROP TABLE user;#
このコマンドにより、Web アプリケーションは SQL クエリの実行時に「OR」演算を実行し、「user」という名前のテーブルを削除します。
ハッカーは、Web アプリケーションの他の脆弱性を悪用したり、サーバーのパスワードを直接解読したりするなど、他の手段でシステム権限を取得できます。 。ハッカーがシステム権限を取得すると、コマンド インジェクション攻撃を通じてサーバーを直接制御できるようになります。たとえば、ハッカーは次のコマンドを通じて単純なコマンド インジェクション攻撃を実行できます。
system(“rm -rf /”);
このコマンドはサーバー上のすべてのファイルとディレクトリを削除し、非常に重大な損失を引き起こします。
3. コマンド インジェクション攻撃を回避する方法
コマンド インジェクション攻撃の基本知識を習得した後は、次の方法でこのセキュリティ リスクを回避できます:
$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));
intval()、
floatval()、
trim() などの PHP の組み込み関数やその他の関数を使用して、データのフィルタリングや検証を行うことができます。
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);
escapeshellcmd() 関数を使用してコマンド ライン引数をフィルタリングする方法を示しています。
$command = escapeshellcmd($_POST['command']); $output = shell_exec($command);
$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."); }上記は、PHP 開発におけるコマンド インジェクション攻撃を回避するためのいくつかの方法です。開発者は注意して使用する必要があります。これらの方法により、Web アプリケーションのセキュリティが大幅に向上します。
以上がPHP 言語開発におけるコマンド インジェクションのセキュリティ リスクを回避する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。