お問い合わせフォーム by cuerda

汎用 PHP 版のダウンロードページへ WordPress 公式プラグインページへ

概要

「お問い合わせフォーム by cuerda」は、日本人が日本のWebサイト向けに開発した、安全性と設置の簡単さを重視した問い合わせフォームです。

お名前、件名、Eメールアドレス、内容を入力し、確認画面で内容を確認してから送信できます。

botによる迷惑な自動送信や二重送信への対策を備え、PDFファイルを1ファイル添付することもできます。

迷惑メール対策として、Cloudflare Turnstileを任意で利用できます。
Cloudflare Turnstileは、従来のCAPTCHAに代わる認証手段で、利用者への負担を抑えながらbotによる自動送信を防止できます。

主な機能

  • 入力画面、確認画面、送信完了画面
  • 管理者へのメール通知
  • 入力内容のサーバー側検証
  • CSRF対策
  • 二重送信防止
  • honeypotによるbot対策
  • 最低送信時間によるbot対策
  • Cloudflare Turnstileに対応
  • PDFファイルを1ファイル添付可能
  • 添付PDFの拡張子、容量、MIMEタイプ、PDFシグネチャ等を検証
  • 問い合わせ内容や添付PDFをサーバーへ恒久保存しない設計

バージョン

Version 1.1.0

動作要件

  • PHP 8.2以上
  • mbstring拡張
  • fileinfo拡張
  • PHP Sessionを利用できる環境
  • HTTPSで公開されているWebサイト

HTTP環境ではフォームを実行しません。

Reverse ProxyやCDNでHTTPS通信を終端している場合は、PHPからHTTPS接続であることを正しく確認できるようWebサーバーを設定してください。

設置方法

  1. 配布ZIPファイルを展開します。
  2. ファイル一式を、ディレクトリ構成を変更せずWebサーバーへ配置します。
  3. config.example.php をコピーして config.php を作成します。
  4. config.php を開き、送信先メールアドレスや送信元メールアドレスなどを設定します。
  5. 問い合わせフォームを表示したいPHPページから cuerda_email_form.php を読み込みます。

例:

<?php require "/path/to/cuerda_email_form.php"; ?>

/path/to/ の部分は、実際に設置した場所に合わせて変更してください。

フォームは、既存ページの <body> ~ </body> 内に相当する場所から読み込んでください。

本製品はフォーム部分のHTMLだけを出力します。
doctype、html、head、body 要素は出力しません。

設定

利用者が通常編集するファイルは config.php です。

配布されている

config.example.php

をコピーして、

config.php

を作成してください。

config.php では主に次の項目を設定できます。

  • 管理者の送信先メールアドレス
  • メールの固定Fromアドレス
  • 各入力項目のラベル
  • 最大文字数
  • PDF添付
  • 最低送信時間
  • Cloudflare Turnstile
  • 確認画面
  • 送信完了画面
  • エラーメッセージ

Cloudflare Turnstileを使用しない場合は、初期設定のまま利用できます。

Turnstileを使用する場合は、Cloudflareで取得したSite KeyとSecret Keyを config.php に設定してください。

Secret Keyなどの秘密情報を公開リポジトリ等へ登録しないでください。

CSS

標準のデザインは、

assets/cuerda-email-form.css

に含まれています。

サイトに合わせてデザインを変更したい場合は、

style.example.css

をコピーして、

style.css

を作成してください。

style.css に記述したCSSは、標準CSSより後に適用されます。

style.css はなくてもフォームは動作します。

アップデートについて

製品をアップデートするときは、利用者が作成した次の2ファイルを上書きしないでください。

config.php
style.css

この2ファイルには、利用者ごとの設定やCSSが保存されています。

それ以外の製品ファイルは、新しいバージョンのファイルへ置き換えます。

ファイル構成

製品側が管理する主なファイルは次のとおりです。

cuerda_email_form.php
config.example.php
style.example.css
includes/core/*.php
includes/standalone/runtime.php
assets/cuerda-email-form.css

利用者が管理するファイルは次の2つです。

config.php
style.css

PDF添付について

PDFファイルは1ファイル添付できます。

添付されたファイルについて、拡張子だけでなく、ファイルサイズ、MIMEタイプ、PDFシグネチャ等を確認します。

検証済みのPDFはランダムなファイル名で一時保存され、メール送信後に削除されます。

問い合わせ内容および添付PDFを、本製品がデータベースやサーバー上へ恒久保存することはありません。

メール送信について

メールはプレーンテキスト形式で送信します。

Fromには config.php で設定した固定メールアドレスを使用します。

問い合わせを行った方のEメールアドレスは、検証後にReply-Toとして使用します。

管理者への通知メールに加え、問い合わせを行った方への自動返信メールを送信できます。 添付されたPDFは管理者への通知メールにのみ添付され、自動返信メールには添付されません。

セキュリティについて

本製品では、安全性を重視して次のような対策を行っています。

  • サーバー側での入力値検証
  • HTML出力時のエスケープ
  • CSRF対策
  • submission tokenによる二重送信防止
  • honeypot
  • 最低送信時間
  • Cloudflare Turnstile
  • PDFファイルの複数条件による検証
  • Session Cookieのセキュリティ設定

PHP Sessionには、strict session mode、CookieのみでのSession ID利用、trans sid無効などの安全性を重視した設定を適用します。

Session CookieにはSecure、HttpOnly、SameSite=Laxを使用します。

必要なセキュリティ設定を利用できないサーバー環境では、安全のためフォームの実行を停止します。

設定エラーが発生した場合も、サーバー内部のパスや詳細な設定内容をWebページ上へ表示しません。

WordPressで利用する場合

この配布ファイルは汎用PHP版です。

WordPress向けには「お問い合わせフォーム by cuerda」WordPressプラグイン版を別途提供します。

WordPressプラグイン版を利用できる場合は、WordPressサイトではそちらの利用をおすすめします。

更新履歴

Version 1.1.0

  • Version 1.0.0の動作を維持しながら、CoreとStandalone固有処理を分離
  • 利用者が管理する config.php と style.css を製品アップデート対象から分離
  • 標準CSSを assets/cuerda-email-form.css へ分離

Version 1.0.0

  • 初回リリース