質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

XSS

XSS【クロスサイトスクリプティング】は、 ソフトウェアのセキュリティホールの一つで、Webサイトに脆弱性が あることからその脆弱性を利用し攻撃する手法です。 主に、入力フォームなどから悪意あるスクリプトを挿入し 該当ページを閲覧したブラウザ上でそのスクリプトを実行します。

CSRF

クロスサイトリクエストフォージェリ (Cross site request forgeries、CSRF)は、 外部Webページから、HTTPリクエストによって、 Webサイトの機能の一部が実行されてしまうWWWにおける攻撃手法です。

Q&A

5回答

738閲覧

PHP言語を利用したform(お問い合わせ)を作成する時の注意点について

web_abc2020

総合スコア0

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

XSS

XSS【クロスサイトスクリプティング】は、 ソフトウェアのセキュリティホールの一つで、Webサイトに脆弱性が あることからその脆弱性を利用し攻撃する手法です。 主に、入力フォームなどから悪意あるスクリプトを挿入し 該当ページを閲覧したブラウザ上でそのスクリプトを実行します。

CSRF

クロスサイトリクエストフォージェリ (Cross site request forgeries、CSRF)は、 外部Webページから、HTTPリクエストによって、 Webサイトの機能の一部が実行されてしまうWWWにおける攻撃手法です。

0グッド

2クリップ

投稿2021/08/19 15:13

実現したいこと

PHPを利用してお問い合わせフォームを作成したいと考えております。
経験豊富なteratail登録ユーザー様へご質問させて頂きたいことがあり、投稿させていただきました。

お問い合わせフォームを作成するにあたり、「最低限これだけは対策(注意)した方が良い」事を
自分なりに調べてまとめてみましたので、漏れがないかご教示いただければ幸いです。

対策(注意)するべきこと

※勉強中の項目あり

・サイトはSSL化されていること
・クロスサイトスクリプト(XSS)対策
・クロスサイトリクエストフォージェリ(CSRF)対策
・セッション対策(確認画面以降のページへアクセス不可、2重送信対策)(クッキーは使用しない?)
・hiddenの値は見えないようにphpのループ処理?などを使って対策する
・文字コード対策(UTF-8がベスト?)

他気になる対策方法

・セッション・ハイジャック
・クリックジャッキング
・データベースを利用するならSQL対策
・メールアドレスの正規チェック
・一つのファイルで完結させない
(確認画面ページ・完了ページを設ける ※コーディング目線で改修しやすいように)

=======
以上となります。
実際のコーディングは人それぞれの書き方があると思いますが、
対策については共通だと認識しております。

アドバイスのほどよろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/08/19 22:09

僕はこういう質問好きなんですけど、teratail 的には適切な回答を集めるのが難しい質問なので、ぜひうまくハンドリングしてください。
guest

回答5

0

質問者さんの立場は、サイト制作を発注する立場でしょうか? ご自身で開発する立場でしょうか?
もし、開発する立場なら、矛盾する条件が出てきているので気になります。以下、開発する立場だとして回答しますが、

・セッション対策(確認画面以降のページへアクセス不可、2重送信対策)(クッキーは使用しない?)

もし、クッキー(およびクッキーによるセッション管理)を使わないとすると、
以下は対策の必要はありません。

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

・クリックジャッキング

しかし、セッション管理を使わないとすると、

・hiddenの値は見えないようにphpのループ処理?などを使って対策する

hiddenパラメータは使うことになります(SPAにしたら必要ないですが)し、見えないようにするには「phpのループ処理」ではなく暗号化くらいです。
でも、問い合わせフォームの場合、hiddenに入るのは利用者が入力した文字列ですから、別に見えても差し支えないですよ。hiddenの値を見ることができるのは、利用者本人だけですから。

・データベースを利用するならSQL対策

「SQL対策」ではなく「SQLインジェクション対策」ですかね。もちろん要件として明記することは重要ですが、SQLインジェクション対策は、あらゆる脆弱性の中でも対策がもっとも簡単なので、「対策するのは当たり前」として、いったん別の要件から考えた方がよいです。データベースを使う必要があるのか、データベースを使うと秘密情報がそこに貯まること自体がリスク、などです。同様に、問い合わせログをファイルとして残すこともリスクではありますが、業務の都合でログを残したいという要望もあるでしょう。

今まで見てきたように、

  • 作り方(セッション管理を使うか否か、SPAかMPAか等)によって生まれるリスクが変わる
  • 業務上の要求(問い合わせログを残すか否か)によって生まれるリスクが変わる

これら矛盾する要件を解決していく必要があります。単に列挙すればよいわけではありません。

ご質問の文面からは、知っている用語を並べただけのように思いました。
ご自身で開発されるのであれば、この状態では、「セキュリティ要件」が定まってもその通り作れるだけの知識が足りてないように思います。自著で恐縮ですが、以下の書籍で勉強されたらいかがでしょうか?

体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践

サイトを発注する立場であれば、聞きかじりの用語を並べるのではなく、しっかりしたベンダーを選定して、守りたいデータや処理を要件として伝え、実装についてはお任せした方がよいと思います。私がベンダーなら、ご提示の要件を見たら悩みます。つまり、あまり意味がありません。

投稿2021/08/19 23:44

編集2021/08/20 00:08
ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

回答

搭載する機能にもよりますが、
お問い合わせフォームはセキュアに作ろうとするとそれなりに大変なので、質問掲示板で回答できる範囲では収まりません。
(表面的に見える機能だけではなく、どのように管理運用するかまで考えて設計する必要があります。)

まずは
「最低限これだけは対策(注意)した方が良い」=「ここまでやれば大丈夫」というようなわかりやすい指標は存在しない(要件や機能、運用によって項目や重要度は変わる)という事を認識する必要があります。

自力で作ること(学習)が目的であれば
体系的にwebアプリケーションのセキュリティについて学習されることをお勧めします。

取っ掛かりとしては
安全なウェブサイトの作り方
を一通り読んで理解してから、ご自身が質問中で挙げられている項目がどういったもので、どの様な場合に必要なのかというところを整理しなおしてみることをお勧めします。

その上で、機能を本当に最低限に絞ってからその中でセキュアなものを作っていく&理解した範囲で機能追加をしていくというのが最も早い道かと思います。

体系的に学ぶ 安全なWebアプリケーションの作り方 第2版
は初学者がすぐに理解するには難しめですが、定番中の定番ですのでこちらも読んでみることを強くお勧めします。

補足

極端に聞こえるかもしれませんが、学習目的ではなくフォーム設置が目的であれば、Googleフォームやその他のSaaSで提供されているフォームを使う方が様々な観点から非常に有効で、多くのケースでベストな方法だったりします。

次点でWordPressやその他CMSで定番になっているフォームプラグインを使うことも有効ですが、
WordPressをセキュアに運用すること自体がそれなりに知見が必要なので、前者に比べるとお勧めできません。

配布されている(それなりによく使われているものでも)PHPの問い合わせフォームは脆弱性が多く含まれていることも珍しくないので、コードを読んで品質を判断出来ない状態では使用しない方が良いです。

投稿2021/08/19 15:49

編集2021/08/20 01:58
tanat

総合スコア18713

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

前提

対策については共通だと認識しております。

そんなことは無いんですよねぇ^^;
要件によって全然変わります。
また、選択できるインフラによっても、大きく違うものになります。

お問い合わせフォームの対策は、「サイト構築に必要な一般的な対策」+「お問い合わせフォームの対策」で成立するので、前者は体系的に学習した方が良いです。

雑な回答

「お問い合わせフォームの対策」は以前似た質問に回答したことがあります。
【PHP】メールフォームのセキュリティ対策について
他にも何件か回答した覚えがありますが、今となっては古い回答なので、現状とのすり合わせは必要かと思います。
(似た質問はいくつもあって、似たような回答を付けていますが、ockeghem さんの回答も探してみると良いです。実装に寄った回答が付いていると思います。)

感想(?)

自動で返信メールを出さなかったり、メール以外の伝達方法をとったりすると、ずいぶん楽が出来るんですけどねぇ。
クライアントにはなかなか受け入れられない。

投稿2021/08/19 22:06

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

最低限これだけは対策

最低限という意味では、ユーザーから受け取ったデータはそのまま表示をしない

投稿2021/08/20 00:37

yambejp

総合スコア114769

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

最低限これだけは対策(注意)した方が良い

ないです。要件次第。
どのような対策をするにしても一通り問題を把握したうえで(ここは既にある回答の通り)、何を当該アプリケーションで守るのかを要件として定義します。
定義したらその通りに実装するだけです。

  • その問い合わせフォームにアクセスできるのはどういう人?
  • アクセスの方法は?
  • 入力する項目は?
  • どのような形で入力内容が届く?保存される?

などなど。
それによって導入すべき対策も異なります。

判断できない場合は既にあるサービス(評価の高いもの、バックがしっかりしているもの)を使った方が良いでしょう。

投稿2021/08/19 21:55

m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問