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

PHPの$_POST変数とは?基本からhtmlspecialchars()での安全な使い方まで徹底解説

はじめに

PHPの$_POSTは、事前に定義されたスーパーグローバル変数の一つです。HTTP POSTメソッドでURLに送信されたデータが、キーと値のペアからなる連想配列として格納されます。この変数で受け取れるのは、リクエストのContent-Typeがapplication/x-www-form-urlencodedまたはmultipart/form-dataの場合です。

$HTTP_POST_VARSという変数にも同じ情報が含まれていましたが、こちらはスーパーグローバルではないため、現在では非推奨(deprecated)となっています。新規のコードでは必ず$_POSTを使用しましょう。

HTMLフォームからPOSTデータを送信する方法

POSTリクエストを使ってサーバーへデータを送信する最も簡単な方法は、HTMLフォームのmethod属性を「POST」に指定することです。

例として、ブラウザで開いているURLがhttps://localhost/testscript.phpであるとします。以下のようなフォームを持つtest.htmlを作成します。

<form action="testscript.php" method="POST">
    <input type="text" name="name">
    <input type="text" name="age">
    <input type="submit" value="送信">
</form>

ユーザーがフォームに入力して送信ボタンを押すと、入力内容がPOSTリクエストとしてtestscript.phpへ送られます。受け取る側のPHPスクリプトは次のように記述します。

サンプルコード:$_POSTで値を受け取る

<?php
echo "名前 : " . $_POST["name"] . "<br>";
echo "年齢 : " . $_POST["age"];
?>

実行結果

上記のスクリプトを実行すると、次のような出力が得られます(ユーザーが name=xyz、age=20 と入力した場合)。

Name : xyz
Age : 20

$_POST["name"]や$_POST["age"]のように、フォームのname属性で指定した名前をキーとして連想配列から値を取り出せます。非常にシンプルですね。

セキュリティ対策:htmlspecialchars()関数の活用

ユーザーからの入力をそのまま画面に出力すると、悪意あるスクリプトが埋め込まれるXSS(クロスサイトスクリプティング)攻撃の危険性があります。これを防ぐために、htmlspecialchars()関数を使って特殊文字をHTMLエンティティに変換することが推奨されます。

htmlspecialchars()関数によって変換される主な文字は以下の通りです。

元の文字変換後(HTMLエンティティ)
&(アンパサンド)&amp;
"(ダブルクォート)&quot;
'(シングルクォート)&#039; または &apos;
<(小なり記号)&lt;
>(大なり記号)&gt;

それでは、htmlspecialchars()関数を使用した安全なコード例を見てみましょう。ここでもユーザーが name=xyz および age=20 を入力したものとします。

サンプルコード:htmlspecialchars()を使った出力

<?php
echo "Name: " . htmlspecialchars($_POST["name"]) . "<br>";
echo "age: " . htmlspecialchars($_POST["age"]) . "<br>";
?>

実行結果

Name : xyz
Age : 20

このように、$_POSTの値を直接出力するのではなく、htmlspecialchars()関数を通すことで、特殊文字が無害化され、安全にブラウザへ表示できます。

まとめ

  • $_POSTは、HTTP POSTメソッドで送信されたフォームデータを連想配列として保持するスーパーグローバル変数である
  • HTMLフォームのmethod属性を「POST」にすることで、最も手軽にデータを送信できる
  • 古い$HTTP_POST_VARSは非推奨のため使用しない
  • 出力時にはhtmlspecialchars()関数で特殊文字をエスケープし、XSS対策を行うのが鉄則

$_POSTはPHPのフォーム処理において欠かせない変数です。基本的な使い方とあわせて、セキュリティ面の対策もしっかり身につけておきましょう。

  1. PHPのzip_entry_name()関数とは?使い方とサンプルコードを解説

    PHPのzip_entry_name()関数は、ZIPアーカイブ内に格納されているファイル(エントリ)の名前を取得するための関数です。この関数を使用することで、ZIPファイルの中にどのようなファイルが含まれているのかを簡単に確認できます。構文zip_entry_name(zip_entry)パラメータzip_entry − zip_open()で開いたZIPリソースに対してzip_read()で読み込んだ、ZIPディレクトリエントリを指定します。戻り値zip_entry_name()関数は、指定したZIPエントリ(アーカイブ内のファイル)の名前を文字列として返します。以下に具体例を示します。「

  2. Pythonのデフォルト引数(デフォルトパラメータ)とは?基本の使い方をサンプルコードで解説

    Pythonにおけるデフォルト引数(デフォルトパラメータ)とは、関数を呼び出す際にその引数へ値が渡されなかった場合に、自動的に初期値が適用される引数のことです。デフォルト引数を使うことで、同じ関数をさまざまなパターンで柔軟に呼び出せるようになります。 次の例では、age 引数にデフォルト値 35 を設定しています。呼び出し時に年齢が指定されなかった場合は、このデフォルト値が出力されます。 サンプルコード #!/usr/bin/python # 関数の定義 def printinfo(name, age = 35): この関数は、渡された情報を出力します print(Name:,