PHP
 Computer >> コンピューター >  >> プログラミング >> PHP

PHPでユーザー入力を安全にサニタイズする方法【実践コード例付き】

PHPにおける入力サニタイズとは?

PHPでユーザー入力を扱う際、「サニタイズ(無害化)」は非常に重要な概念です。サニタイズとは、入力データに含まれる不正な文字や危険な文字列をエスケープ・除去する処理のことです。適切なサニタイズを行わないと、SQLインジェクションやXSS(クロスサイトスクリプティング)、コマンドインジェクションといった深刻なセキュリティリスクにさらされる可能性があります。

ここでは、ユーザー入力を安全かつ確実に処理するための代表的なベストプラクティスを、コード例とあわせて紹介します。

1. mysqliの real_escape_string() を使う

MySQLiでデータベースを操作する場合、real_escape_string() メソッドを使用することで、文字列内の特殊文字を適切にエスケープでき、SQLインジェクションの防止につながります。

コード例

<?php
   $conn = new mysqli("localhost", "root", "", "testdb");
   $street = $conn->real_escape_string($_POST['street']);
?>

2. htmlentities() と html_entity_decode() を活用する

データベースへの保存時に htmlentities() でHTML特殊文字をエンティティ化し、ブラウザに表示する際に html_entity_decode() で元に戻す方法も有効です。これにより、悪意あるHTMLタグやJavaScriptコードの埋め込みによるXSS攻撃を防ぐことができます。

コード例

<?php
   $data['message'] = htmlentities($message); // データベース挿入時
   echo html_entity_decode($data['message']); // ブラウザ表示時
?>

3. コマンドラインでは escapeshellarg() を使う

system() や exec() などでシェルコマンドを実行する場合は、escapeshellarg() を使ってユーザー入力を必ずエスケープしましょう。これにより、入力値を通じた意図しないコマンドの実行(コマンドインジェクション)を防ぐことができます。

コード例

<?php system('ls ' . escapeshellarg($data['dir'])); ?>

まとめ

ユーザー入力は決して信用せず、用途に応じて適切なサニタイズ処理を施すことが、安全なWebアプリケーション開発の基本です。特にデータベース操作においては、プリペアドステートメントを併用することで、より堅牢なセキュリティ対策を実現できます。

  1. JavaScriptのwithステートメントとは?用途と使い方をわかりやすく解説

    JavaScriptのwithステートメントは、特定のプロパティに対してデフォルトのオブジェクトを指定し、冗長になりがちなオブジェクト参照の記述を省略するための構文です。withブロック内で指定したオブジェクトは、スコープチェーンの先頭に追加されるため、そのプロパティ名だけで直接アクセスできるようになります。 基本的な動作 通常、オブジェクトのプロパティにアクセスするには、毎回オブジェクト名を明示する必要があります。しかし、withステートメントを使えば、以下のようにコードを簡潔に書けます。 オブジェクト名の繰り返し記述を省略できる 同じオブジェクトの複数のプロパティへ短くアクセスできる 指

  2. C言語の定数(const)とは?基本構文から種類・実行例まで徹底解説

    定数(Constant)とは、一度値を定義するとプログラムの実行中にその値が一切変わらないものを指します。固定値を参照するために、変数を定数として宣言することができます。定数は「リテラル」と呼ばれることもあります。C言語では、const キーワードを使用して定数を定義します。定数の基本構文C言語で定数を宣言する際の基本的な構文は以下の通りです。const 型 変数名; または const 型 *ポインタ変数名;定数の主な種類C言語で扱われる定数には、以下のような種類があります。整数定数 … 例:1、0、34、4567浮動小数点定数 … 例:0.0、156.89、23.4568進数・16進数定数