Webフォーム作成の記事

ARTICLE
Webフォーム作成

PHPで問い合わせフォームは作成可能?セキュリティの注意点も解説

掲載日:2025年3月4日

Webサイトに問い合わせフォームを設置したい場合、PHPを使用して開発することができます。しかし、「PHPでの開発は難しくないか」「セキュリティ面は大丈夫か」など、不安に感じる方も多いのではないでしょうか。

この記事では、PHPを使用した問い合わせフォームの作成方法から、セキュリティ対策まで詳しく解説します。

また、問い合わせフォームを作りたいけど「PHPでの開発は難しそう」「フォーム作成にあたり、セキュリティ面に不安がある」という方には、Webフォーム作成「SPIRAL®」がおすすめです。Webフォーム作成「SPIRAL®」なら高カスタマイズ・高セキュリティのWebフォームを、テンプレートをもとに作成可能。詳しくは以下より。

SPIRAL®のお問い合わせ・資料請求はこちら

PHPで問い合わせフォームを作ることは可能?

webプログラミングのコンセプトイラスト、フロントエンド・バックエンド・フルスタック開発のイメージ図

結論から言うと、PHPで問い合わせフォームを作ることは可能です。

ただ、かつては、PHPを使ってフォームを一から開発する方法が一般的でしたが、現在では「フォーム作成ツール」や「ノーコードツール」を活用するケースが増えています。

とはいえ、自社独自の仕様にこだわりたい場合や、既存システムと細かく連携させたい場合など、PHPでオリジナルフォームを開発するケースも今なお存在します。

前提として、PHPを使ってのフォーム開発はセキュリティ面での懸念が残る場合がありますので、その点は認識したうえでこの先の内容を読み進めていただければと思います。

プログラミング言語「PHP」とは?

PHPとは、WebサイトやWebアプリケーションにおける「動的なコンテンツ」の開発を目的に誕生したプログラミング言語です。正式名称は「PHP: Hypertext Preprocessor(ハイパーテキスト プリプロセッサー)」で、動的コンテンツをはじめ、さまざまな用途で活用されています。

多種多様なプログラミング言語がある中で、PHPの学習難易度はやや低めであり、初めての方でも学びやすく、さまざまな機能を実装できるとして、世界中で利用されています。

PHPとHTMLの違い

PHPと比較される言語に「HTML」があります。HTMLとは、Webページを制作するためのマークアップ言語(文章の構成やデザイン情報をコンピューターに伝達するための言語)です。あくまでHTMLは、テキストの構造やデザインを記述するだけの「マークアップ言語」であり、プログラミング言語であるPHPとは構造が異なります。

言語としての違いに加えて、HTMLとPHPは「静的であるか、動的であるか」といった違いもあります。HTMLは、静的なWebページを制作する言語です。静的とは、「Webページにいつアクセスしても、まったく同じ結果が表示される」ことを意味します。

対してPHPは、「動的」なプログラミング言語であり、「ユーザーの操作次第で、ページの内容が変化する」のが特徴です。

どちらもWebページを制作できる点は同じですが、HTMLはフロントエンド(ユーザーが直接操作する部分)で、PHPはサーバーサイド(データベース操作やAPI処理など)で用いられます。役割は異なるものの、両者を組み合わせることで、さらに高いパフォーマンスを発揮可能です。

PHPで実行できること

PHPはWebページにおける動的な処理、主にサーバーサイドで用いられます。具体的にどのような処理を実行できるのか詳しく見ていきましょう。

・問い合わせフォームの実装

・検索機能の実装

・ECサイトやブログ、掲示板サイトの構築

・予約システムの構築

・データベースとの連携

問い合わせフォームの実装

この記事の本題である「問い合わせフォーム」の実装です。PHPを使えば、問い合わせフォームを比較的かんたんに実装できます。ユーザーの名前や生年月日、電話番号、問い合わせ内容などの入力項目を設置し、ページ全体のデザインを整えます。

検索機能の実装

PHPを用いれば、Webサイトブログなどに「検索欄」も設置可能です。検索機能は、Webサイト内で特定キーワードを検索したい場合などに利用します。基本的には、データベースから情報を取得し、機能を出力させるだけの操作で実装可能です。

ECサイトやブログ、掲示板サイトの構築

ECサイトやブログ、掲示板といったWebサイトにもPHPが用いられています。たとえば、Webサイトを制作できるCMSである「WordPress」などのテキストエディタからPHPのコードを入力すれば、かんたんに機能を実装できます。

予約システムの構築

飲食店やホテルなどの「予約システム」にもPHPが用いられています。予約希望の日時を入力したり、空き状況を確認したりといった機能を実装可能です。

データベースとの連携

PHPでは、MySQL(オープンソース型のデータベース管理システム)などデータベースとの連携が可能です。PHPを介してデータベースにアクセスし、データの取得や保存、削除などを行います。

問い合わせフォームとは?

問い合わせフォームとは、ユーザーが商品やサービスに関する質問ができるフォームのことです。一般的には企業のWebサイトに設置されています。

以前まではWebサイトに記載されているメールアドレスに問い合わせ内容を送る、という問い合わせ方法が主流でしたが、フォームを設置することで、わざわざメールアドレスを入力しなくても問い合わせができるため、現在のWebサイトではなくてはならない機能のひとつとなっています。

問い合わせフォームの活用シーン

問い合わせフォームが使われる主なシーンは次のとおりです。

・資料請求

・アンケートの回答

・イベント・セミナー申し込み

・求人広告への応募

ただ単に質問を問い合わせるだけでなく、資料を請求したり、セミナーを申し込んだりといった使い方が可能です。

問い合わせフォームの基本項目

問い合わせフォームには「必須項目」と「任意項目」の2種類が設定されているケースが多いです。ユーザーから問い合わせを獲得するためには、必須項目をメインとし、項目数を減らすことが大切です。基本的な項目として次のものがあげられます。

【必須項目】

・問い合わせ項目(種別)

・問い合わせ内容(本文)

・社名・名前

・メールアドレス

【任意項目】

・電話番号

・住所

・部署名・役職名

問い合わせフォームのメリット・デメリット

続いて、問い合わせフォームのメリットとデメリットについてお伝えします。

メリット

代表的なメリットは、ユーザビリティの向上です。何か質問があった際、フォームが設置されていれば、すぐに問い合わせられます。電話とは異なり、24時間いつでも質問や申し込みができるフォームは使い勝手がよいといえるでしょう。

また、「項目」を設置することで、ユーザーの正確な回答を誘導できます。さらに、入力ミスの軽減にもつながります。回答を受け取る企業としては、ユーザビリティの向上によって多くの問い合わせを獲得できるようになります。

スピーディーな顧客対応ができたり、顧客の意見をサービスに反映しやすくなったりと、自社のマーケティングに活かせるでしょう。問い合わせは項目ごとに管理できるため、メールと比較しても対応にかかる手間を削減できます。

また、メールでの問い合わせ受付では、スパムなどの迷惑メールが送られてくる可能性もあります。問い合わせフォームでは、そうした迷惑メール、不要なメールが送られる心配もありません。

デメリット

問い合わせフォームにはユーザーの個人情報が多く含まれるため、セキュリティ対策が必要不可欠です。第三者による不正アクセスが起こらないよう、フォーム自体のセキュリティ対策はもちろん、情報を適切に管理するための社内ルールの策定が必要といえます。

問い合わせフォームは無料でも設置可能ですが、機能や操作性を求める場合、有料のツールを導入するケースもあるでしょう。その場合、初期費用や月額費用などのコストがかかります。Webサイト上への設置や、項目やデザインの変更など、担当者の負担がかかることも想定しておきましょう。

PHPは脆弱性があるため強固なセキュリティ対策が必須

PHPには、比較的容易に動的なコンテンツ・機能を実装できるメリットがあります。しかし、柔軟に開発できる反面、入力値のチェック漏れやデータベース操作ミスなど、プログラム実装時の不備により脆弱性が生じやすい点には注意が必要です。

そのため、セキュリティ対策を意識した設計・開発が必要不可欠といえます。

PHPは不正アクセスの標的になりやすい

PHPは世界中で広く使われており、PHP製のWebアプリケーションを狙った攻撃も数多く存在します。

特に、入力値チェックの不備や古いバージョンの使用などにより、脆弱性を突かれて不正アクセスの被害を受けるケースも少なくありません。

そのため、セキュリティ意識をもった開発と、PHP自体や利用するシステムのバージョンを定期的にアップデートすることが重要です。

PHPは世界中のあらゆる業務で利用されている

PHPは、企業のコーポレートサイトやECサイト、掲示板、予約システムなど、幅広い分野で世界中に利用されています。

特に、WordPressなどPHP製CMSの普及もあり、PHPが使われたWebサイトは膨大な数にのぼります。

そのため、攻撃者もPHPを使ったサイトに狙いを定め、不備があるサイトを標的にするケースが後を絶ちません。

結果として、PHP製のサイトが狙われやすいという印象をもたれることがあるのです。

PHPで問い合わせフォームを作成する際に行うべきセキュリティ対策

PHPは弱点を突かれやすい言語ですが、適切なセキュリティ対策を施していれば、不正アクセスのリスクは最小限に抑えられます。PHPで問い合わせフォームを作成する際に気をつけるべき攻撃とは次のとおりです。

・CSRF(クロスサイト・リクエスト・フォージェリ)

・XSS(クロスサイト・スクリプティング)

・メールヘッダ・インジェクション

・セッションハイジャック

・ディレクトリ・トラバーサル

・OSコマンドインジェクション

・HTTPヘッダ・インジェクション

・クリックジャッキング

ここから先は、各種の対策をより詳しくご紹介します。

CSRF(クロスサイト・リクエスト・フォージェリ)

CSRFとは、Webの脆弱性を悪用することで、ユーザーの意図に反する処理をさせるサイバー攻撃です。攻撃者は攻撃用のWebサイトを設置し、メールやSNSなどを介してサイトに誘導します。攻撃を受けたユーザーは、意図しない形で登録情報やパスワードが変わったり、不正送金されたりします。

CSRFの対策として、「ワンタイムトークン」が有効です。ワンタイムトークンとは、リクエストごとに生成されるランダムな文字列で、フォーム送信時にそのトークンが一致しなければ処理を拒否する仕組みです。

PHPのコードでワンタイムトークンを発行することで、攻撃への対策が可能です。

XSS(クロスサイト・スクリプティング)

XSSとは、攻撃者がマークアップ言語であるHTMLに悪質なスクリプトを埋め込むことで、個人情報を盗難するといった攻撃です。攻撃によってシステムの障害が起こる場合もあります。HTMLとPHPを併用している場合、攻撃されるリスクが高まります。

XSSの対策として、「エスケープ処理」が有効です。エスケープ処理とは、特殊な意味をもつソースコードを別の文字列に書き換えることを指します。PHPでは「htmlspeialchars」と呼ばれる関数を用いることでエスケープ処理が可能です。

メールヘッダ・インジェクション

メールヘッダーインジェクションとは、攻撃者が、件名といった「メールの入力値」を改ざんすることで、メールヘッダーを攻撃する手法です。意図しないメールが送信されたり、アプリケーションが不審な挙動をしたりします。

特に「問い合わせフォーム」や「アンケートフォーム」などフォーム系のメールには注意が必要です。メールヘッダーに対する脆弱性を突かれると、ユーザーのメールアドレスが迷惑メールの送信に悪用される可能性があります。

メールヘッダーインジェクションの対策としては、「メールヘッダーの固定化」が有効です。メールヘッダーの本文以外の入力をシャットダウンすることで、外部からの操作をブロックします。入力値の改行コードを削除すれば、解散を防止可能です。

セッションハイジャック

セッションハイジャックとは、攻撃者が、Webサイトとユーザー間のやり取りの中で発生する「セッション」を悪用する攻撃です。攻撃者がセッションIDを不正に取得し、セッションを乗っ取ることで、ユーザーの個人情報が盗難されたり、機密データにアクセスされたりします。

セッションハイジャックの対策として、Cookieの操作や関数の利用によるセッションの無効化が有効です。たとえば、Cookieに対して「secure」と呼ばれる属性を付与したり、アクセスごとにセッションIDを変更できる「session_regenerate_id関数」を利用したりします。攻撃者が推測不要なセッションを作成したり、その都度セッションIDを変更したりすることで、サイバー攻撃のブロックが可能です。

ディレクトリ・トラバーサル

ディレクトリトラバーサルとは、システムの脆弱性を突いた攻撃のひとつで、攻撃者によってファイルやディレクトリ(ファイル入れるためのフォルダ)に不正アクセスされることです。

WordPressなどのCMSの利用をきっかけに攻撃されるケースが多いです。CMSはプラグインが豊富ですが、その分脆弱性を見抜かれやすいため、ディレクトリトラバーサル攻撃を受けやすくなります。

ディレクトリトラバーサルの対策として、ファイル名にディレクトリを含まないようにするのが有効です。PHPでは、「basename関数」を用いたコーディングを行うことで、ディレクトリを含まないファイル名を取得できます。

OSコマンドインジェクション

OSコマンドインジェクションとは、問い合わせフォームや予約フォームなど、Webサイトにおける入力フォームを通じて、不正なOSコマンドが埋め込まれるサイバー攻撃です。外部からの不正なコマンドが紛れ込むことで、コンピューターが大きな侵害を受けます。場合によっては、大量の顧客情報が盗まれることもあります。

OSコマンドインジェクションの対策としては、PHPを含む外部プログラムを利用しないのがもっとも効果的です。しかし、PHP自体を利用しないのは現実的に難しいので、実行コードを慎重に扱うことが重要といえます。

HTTPヘッダ・インジェクション

HTTPヘッダ・インジェクションとは、HTTPヘッダーに細工した文字列を注入することで、偽ページなどを表示させる攻撃です。ユーザーが、表示された偽ページにアクセスすることで、個人情報や機密データが抜き取られてしまいます。

HTTPヘッダ・インジェクションの対策としては、エスケープ処理が有効です。クロスサイトスクリプティング対策と同様に、HTTPレスポンスヘッダー生成時、ユーザー入力値に改行コードが含まれていないかチェックし、無効化することで攻撃を防ぎます。

クリックジャッキング

クリックジャッキングとは、ボタンやリンクなどWebページの特定要素を隠蔽・偽装することで、ユーザーにクリックを誘う攻撃方法です。クリックジャッキングされたページをクリックすると、身に覚えのないページが表示され、個人情報が抜き取られたり、ウイルス感染したりします。

クリックジャッキングの対策として、「X-FRAME-OPTIONSヘッダー」が有効です。同コードを挿入することで、ページの読み込みを禁止できます。したがって、攻撃者によるWebページの偽装をブロック可能です。

各種の攻撃への対策をまとめて行う方法

ここまで、各種攻撃の詳細と対策方法についてお伝えしましたが、Laravel(ララベル)というWebアプリケーション開発フレームワークを使用することでまとめて対策が可能です。

PHPを使いフォーム作成を行う場合は、こちらのフレームワークを使用してもよいでしょう。 

また、PHPでイチからフォーム作成を行わずにツールを使用してフォームを作りたいという方には、Webフォーム作成「SPIRAL®」がおすすめです。Webフォーム作成「SPIRAL®」なら高カスタマイズ・高セキュリティのWebフォームを、テンプレートをもとに作成可能。詳しくは以下より。

SPIRAL®のお問い合わせ・資料請求はこちら

PHPを使った問い合わせフォームの作成の流れ

それでは最後に、PHPを使った問い合わせフォームの作成流れをご紹介します。主な流れは以下となります。

input.php       入力画面
confirm.php   確認画面
store.php        登録処理
complete.php 完了画面

1. 入力画面(input.php )

まずは、問い合わせフォームの「型」を作ります。フォームの型とは、コードを用いた骨組みのことで、型をベースにコードを埋め込んでいくイメージです。

コードは、以下を参照してください。


<?php

//セッション開始
session_start();

/**
 * 選択肢の項目設定
 */
//性別
$sex_items = [“男”, “女”];

//都道府県
$prefecture_items = [“北海道”, “青森”, “岩手”, “…”, “沖縄”];


/**
 * 確認画面から戻った場合の処理
 */
$name       = $_SESSION[‘name’];
$sex        = $_SESSION[‘sex’];
$prefecture = $_SESSION[‘prefecture’];
$address    = $_SESSION[‘address’];

?>
<html>
    <body>
        <form action=”./confirm.php” method=”post”>
            <div>
                お名前:
                <input type=”text” name=”name” value=”<?php echo $name; ?>”>
            </div>

            <div>
                性別:
                <select name=”sex”>
                    <option value=””></option>
                    <?php foreach ($sex_items as $sex_item) { ?>
                    <option value=”<?php echo $sex_item; ?>” <?php if ($sex === $sex_item) echo “selected”; ?> ><?php echo $sex_item; ?></option>
                    <?php } ?>
                </select>
            </div>

            <div>
                住所:
                <select name=”prefecture”>
                    <option value=””></option>
                    <?php foreach ($prefecture_items as $prefecture_item) { ?>
                    <option value=”<?php echo $prefecture_item; ?>” <?php if ($prefecture === $prefecture_item) echo “selected”; ?>><?php echo $prefecture_item; ?></option>
                    <?php } ?>
                </select>
                <input type=”text” name=”address” value=”<?php echo $address; ?>”>
            </div>

            <div>
                <input type=”submit” value=”確認画面へ”>
            </div>
        </form>
    </body>
</html>

2.確認画面(confirm.php)

ユーザーによる入力画面ができあがったら、次に「確認画面」の作成に進みましょう。入力を終えたユーザーに対して、入力が正しいものか確認するための画面に遷移させます。入力画面から確認画面へとスムーズに画面が切り替わるようPHPのコーディングを施します。

確認画面のコードは、以下を参照してください。


<?php

//セッション開始
session_start();

//入力画面からセッションへ保存しておく
$_SESSION = $_POST;

//入力画面からの情報を変数へセットする
$name       = $_POST[‘name’];
$sex        = $_POST[‘sex’];
$prefecture = $_POST[‘prefecture’];
$address    = $_POST[‘address’];
?>

<html>
    <body>
        <form action=”./store.php” method=”post”>
            <div>
                お名前:<?php echo $name; ?>
            </div>

            <div>
                性別:<?php echo $sex; ?>
            </div>

            <div>
                住所:<?php echo $prefecture . $address; ?>
            </div>

            <div>
                <input type=”submit” name=”type” value=”修正する”>
                <input type=”submit” name=”type” value=”送信”>
            </div>
        </form>       
    </body>
</html> 

3.登録処理(store.php)

問い合わせフォームから送信されたデータを、PHPで受け取って処理する部分を作成します。

具体的には、ユーザーが入力した名前、メールアドレス、問い合わせ内容などを取得し、メールで通知する処理を組み込む流れです。

登録処理のコードは、以下を参照してください。


<?php
//セッション開始
session_start();

//戻る場合には入力画面へリダイレクト
if ($_POST[‘type’] === “修正する”) {
    header(‘Location: ./input.php’);
    exit;
}

//セッション情報を変数へセットする
$name       = $_SESSION[‘name’];
$sex        = $_SESSION[‘sex’];
$prefecture = $_SESSION[‘prefecture’];
$address    = $_SESSION[‘address’];


//メール送信処理を書く。。。


//完了画面へリダイレクト
header(‘Location: ./complete.php’);
exit;
?>

登録処理に関して、入力された分の処理は別途対応する必要があるため、注意が必要ですのでこの点だけ忘れないようにしておく必要があります。

4.完了画面(complete.php)

確認画面を作成したら、最後に「完了ページ」を作成しましょう。前回のステップでデータを引き渡すためのコードは作成済みなので、それに加えて、完了メッセージがきちんと表示されるよう構成を整えます。

ここまでの流れをおさえていただければ、フォームが作成できるでしょう。

完了画面のコードは、以下を参照してください。

<html>
    <body>
        問い合わせありがとうございました。
    </body>
</html>

ただし、改めてお伝えをするとPHPを使ったフォーム作成はセキュリティのリスクがあります。その点を把握したうえで、フォーム作成については慎重に検討する必要があるでしょう。

圧倒的なカスタマイズ性とセキュリティで操作性に優れた注文フォームを作成するなら

PHPを使って問い合わせフォームを自作する場合、セキュリティリスクへの対応やメンテナンスの手間などが課題となります。そのため、高度なセキュリティと柔軟なカスタマイズを両立させたいなら、Webフォーム作成「SPIRAL®」がおすすめです

テンプレートによるフォーム作成だけでなく、HTMLやCSSはもちろん、PHPでの柔軟なシステム設計・運用にも対応しており、PHPでフォーム作成する際のセキュリティリスクを心配せず堅牢なセキュリティを確保できます。

Webフォーム作成「SPIRAL®」は、金融や製造、小売、学校、官公庁など13,000社を超える導入実績をもちます。サービスについてさらに詳しく知りたい方は、公式ページをご覧いただくか、導入を検討中の方はこちらからぜひお問い合わせください。

【まとめ】PHPは問い合わせフォーム作成に役立つがセキュリティへの配慮が必要

本記事では、PHPと問い合わせフォームについて次のポイントを中心にお伝えしました。

・PHPは問い合わせフォームの作成によく用いられている

・HTMLは静的、PHPは動的なコンテンツ作成に向いており、両者を組み合わせることでよりよいフォームを作成できる

・PHPはフォーム作成に役立つ一方でセキュリティ面に懸念がある

・PHPは構造上「セキュリティホール」が発生しやすいうえ、世界中で利用される言語なので攻撃者の標的になりやすい

PHPを活用することで、よりユーザビリティの高い問い合わせフォームを作成できます。しかし、セキュリティ面に懸念が残るため、強固な対策を行うことが重要です。なお、セキュリティを強固にしたうえで、かんたんかつ柔軟性の高いフォームを作成したい場合は、ツールの導入をご検討ください。

SPIRAL®のお問い合わせ・資料請求はこちら

資料ダウンロード

定額でフォーム作り放題/SPIRAL® Form