PHPで入力値を確実に取得する5つの手順

PHPでの入力値取得の方法を解説するイラストPHP
この記事は約7分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

ウェブサイトを構築する際、PHPはその主要な要素の1つです。

ユーザーからの情報を取り扱うときには、PHPを使って入力値を取得します。

この記事を通じて、初心者でも簡単に理解できるPHPによる入力値取得の手順を学びましょう。

PHPで入力値を取得するとは、具体的には、ユーザーがウェブページのフォームに入力したデータをサーバーサイドで受け取ることを指します。

例えば、ログインフォームではユーザー名とパスワードが入力値になります。

ここでのキーポイントは、入力値を安全に取り扱うことです。

安全な取扱いを怠ると、ユーザー情報が漏洩したり、ウェブサイトが攻撃を受けるリスクがあります。

それを防ぐためには、入力値の取得方法をしっかり理解し、適切なバリデーションとサニタイズを行うことが重要です。

この記事では、PHPでの入力値取得の基本から、バリデーションやサニタイズ、そしてセキュリティ上の注意点までを、コード例を交えて詳しく解説します。

では、まず基本となる入力値の取得方法を見ていきましょう。

●基本的な入力値の取得方法

PHPでの入力値取得には、主にGETメソッドとPOSTメソッドが使われます。

これらのメソッドは、それぞれ異なる状況で用いられます。

○GETメソッドによる入力値の取得

GETメソッドは、ウェブブラウザがサーバーから情報を取得する際に使用されます。

URLの末尾に「?」の後にパラメーターを追加することで、データをサーバーに送信します。

具体的なサンプルコードを見てみましょう。

サンプルコード1:GETメソッドを使った例

<?php
if(isset($_GET["name"])){
    $name = $_GET["name"];
    echo "こんにちは、" . htmlspecialchars($name) . "さん!";
}
?>

このコードではGETメソッドを使って入力値を取得しています。

ユーザーが入力した名前(”name”)をURLパラメーターから取得し、その値を画面に表示しています。

なお、「htmlspecialchars」関数を用いて出力をエスケープすることで、一定のセキュリティ対策を施しています。

次に、POSTメソッドについて解説します。

○POSTメソッドによる入力値の取得

POSTメソッドは、フォームからの大量のデータや、セキュリティが必要な情報をサーバーに送信するときに使用されます。

POSTメソッドではデータがHTTPリクエストボディの中に格納されるため、URLには表示されません。

POSTメソッドを使った例を見てみましょう。

サンプルコード2:POSTメソッドを使った例

<?php
if(isset($_POST["username"]) && isset($_POST["password"])){
    $username = $_POST["username"];
    $password = $_POST["password"];
    echo "ユーザー名:" . htmlspecialchars($username);
    echo "パスワード:" . htmlspecialchars($password);
}
?>

このコードではPOSTメソッドを使ってユーザー名とパスワードを取得しています。

ユーザーが入力したユーザー名とパスワードをHTTPリクエストボディから取得し、その値を画面に表示しています。

GETメソッドと同様に、「htmlspecialchars」関数を用いて出力をエスケープしています。

このように、GETメソッドとPOSTメソッドは、それぞれ適切な状況で用いることが重要です。

ただし、これらのメソッドだけで安全に入力値を取得できるわけではありません。

それには、バリデーションとサニタイズが必要となります。次の節でそれらについて詳しく見ていきましょう。

●入力値のバリデーション – 無効なデータを防ぐ

入力値の取得方法について学んだ次に、重要なトピックがバリデーションです。

バリデーションは入力値が期待する形式や条件を満たしているかどうかを確認するプロセスです。

例えば、Eメールアドレスのフィールドでは、入力値が正しいEメール形式かどうかを確認します。

Eメールアドレスのバリデーションを行うサンプルコードを紹介します。

サンプルコード3:PHPでのバリデーション例

<?php
if(isset($_POST["email"])){
    $email = $_POST["email"];
    if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
        echo "有効なEメールアドレスです: " . htmlspecialchars($email);
    } else {
        echo "無効なEメールアドレスです。";
    }
}
?>

このコードでは、POSTメソッドを使ってEメールアドレスの入力値を取得し、バリデーションを行っています。

具体的には、「filter_var」関数のFILTER_VALIDATE_EMAILフィルタを使用してEメールアドレスの形式が正しいか確認し、有効な場合はその値を表示し、無効な場合はエラーメッセージを表示します。

●サニタイズ – 入力値を安全にする

バリデーションと同様に重要なのが、サニタイズです。

これは、入力値がセキュリティ上の問題を引き起こさないように、特定の文字をエスケープするプロセスです。

たとえば、HTMLタグを含む入力値はブラウザでレンダリングされるときに問題を引き起こす可能性があるため、それらをエスケープします。

入力値のサニタイズを行うサンプルコードを紹介します。

サンプルコード4:PHPでのサニタイズ例

<?php
if(isset($_POST["input"])){
    $input = $_POST["input"];
    $sanitized_input = filter_var($input, FILTER_SANITIZE_STRING);
    echo "サニタイズ後の入力値: " . $sanitized_input;
}
?>

上記のコードは、POSTメソッドを利用してユーザから入力されたデータを取得し、その値をサニタイズするための例です。

ここで重要なのは「filter_var」関数と「FILTER_SANITIZE_STRING」フィルタを使用している部分です。

これにより、ユーザからの入力値中の潜在的に危険な文字やHTMLタグが取り除かれます。結果として、サニタイズされた安全な値が出力されます。

●セキュリティの観点からの注意点

PHPでの入力値の取得とその後の処理においては、いくつかの重要なセキュリティ上の注意点があります。

  1. ユーザからの入力は常に信用できないと仮定してください。
    不適切な入力はシステムに重大な影響を及ぼす可能性があります。
  2. 入力値のバリデーションとサニタイズは必ず行い、不適切な入力値による潜在的な問題を未然に防ぎましょう。
  3. SQLインジェクションやクロスサイトスクリプティング(XSS)などの攻撃を防ぐため、特にデータベースに値を挿入する前やHTMLに値を出力する前には、適切なエスケープ処理を行うことが重要です。
  4. 秘密情報(パスワードなど)は絶対に平文で保存しないでください。
    ハッシュ関数などを利用して適切に暗号化しましょう。

まとめ

以上、PHPでの入力値の取得方法、バリデーションとサニタイズの重要性、そしてセキュリティ上の注意点について学んできました。

これらの知識は、ユーザからの入力値を取り扱う全てのPHP開発者にとって重要です。

ユーザからの入力を適切に扱うことは、アプリケーションの安全性とユーザ体験の両方を確保するための重要なステップです。

最初は難しく感じるかもしれませんが、一歩ずつ進めていけば必ずマスターできます。

それでは、あなたが安全で使いやすいアプリケーションを開発するための一助となれば幸いです。