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

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

新規登録して質問してみよう
ただいま回答率
85.48%
セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

PHP

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

XSS

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

CSRF

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

Q&A

解決済

3回答

1657閲覧

【PHP】メールフォームのセキュリティ対策について

Tiroze

総合スコア35

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

PHP

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

XSS

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

メール

メールは、コンピュータネットワークを利用し、 情報等を交換する手段のことです。

CSRF

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

0グッド

2クリップ

投稿2018/07/31 17:33

編集2018/08/02 06:33

PHPでメールフォームを作成しています。
以下質問させて下さい。

1.WEBサイトからメールサービスへの通信について、セキュリティ対策する必要は
ありますでしょうか。WEB画面については以下対策を行っております。
・クロスサイトスクリプティング(XSS)
・クロスサイトリクエストフォージェリ(CSRF)
・クリックジャッキング

2.1つ1つセキュリティ対策をするよりも、既に存在するメール送信ライブラリを
使用したほうが良いとの回答を見ました。
これはライブラリを使用すれば、個々のセキュリティ対策の実装は不要
ということでしょうか。
https://teratail.com/questions/134736
今のところライブラリは、PhpMailerを使用予定です。

【補足】
・PHPMailerがサポートしているセキュリティ対策は調べてみましたが、
見つける事ができませんでした。
・作成するメールフォームは、送信先は固定でPHPソース内にべた書きする予定です。

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

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

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

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

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

m.ts10806

2018/07/31 22:46

PhpMailerがサポートしているセキュリティ対策については何か調べられましたか?
Tiroze

2018/08/02 06:26

調べてはみました。脆弱性が発生したという記事は見つかりましたが、具体的なセキュリティ対策は見つけることができませんでした。
guest

回答3

0

1.WEBサイトからメールサービスへの通信について、セキュリティ対策する必要はありますでしょうか。

Webサイトとメールサービスは別のサーバーということでしょうか。もし別の場合、Webサーバーとメールサービスはどうやってつなぐのでしょうか? (1)Webサーバーにもメールサーバーがありそれを中継する、(2)Webアプリケーションからダイレクトにメールサービスと通信する。

「通信について、セキュリティ対策する必要はあ」るかという質問ですが、微妙なラインですね。TLSによる暗号化をした方がよいと思いますが、「必要」とまでは言えないと思います。

WEB画面については以下対策を行っております。
・クロスサイトスクリプティング(XSS)
・クロスサイトリクエストフォージェリ(CSRF)
・クリックジャッキング

加えてメールヘッダインジェクション対策は必須ですが、PHPMailer側で対策されているかもしれません。これは調べないとわからないです。どちらの場合でもアプリケーション側で対策しておけば安心です。
これら以外に、メールフォームの悪用対策というのがありますが、メールフォームというものは元々悪用できるものなので、どこまでやるかは難しいところですし、要件次第というところもあります。

2.1つ1つセキュリティ対策をするよりも、既に存在するメール送信ライブラリを
使用したほうが良いとの回答を見ました。
これはライブラリを使用すれば、個々のセキュリティ対策の実装は不要
ということでしょうか。
https://teratail.com/questions/134736
今のところライブラリは、PhpMailerを使用予定です。

参照されている回答をみましたが、「1つ1つセキュリティ対策をするよりも、既に存在するメール送信ライブラリを使用したほうが良いとの回答」はないように思います。どの回答・どの文を指していますか?

メール送信ライブラリでできるセキュリティ対策はメールヘッダインジェクションくらいですし、それはライブラリの仕様・実装次第です。そのほかの対策はアプリケーション側で対応する必要があります。
また、PHPMailerは過去に危険な脆弱性が発見されているので、最新版を使うことを確認してください。これはどのライブラリを使う場合にも言えることですが。

投稿2018/08/01 00:51

ockeghem

総合スコア11701

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

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

namda

2018/08/02 07:01

メールヘッダインジェクション対策も当然ですがSMTPサーバ側をどうするかという問題とも言えますね。 自前でSMTPサーバを構築するよりgmailメール配信業社などノウハウを積んでるところを使うべきと思います。 特に商用運用するなら特に必要になってくると考えられます。
Tiroze

2018/08/02 08:24

>>ockeghemさん ご回答ありがとうございます。 >Webサイトとメールサービスは別のサーバーということでしょうか。もし別の場合、Webサーバーとメ>ールサービスはどうやってつなぐのでしょうか? (1)Webサーバーにもメールサーバーがありそれを中継>する、(2)Webアプリケーションからダイレクトにメールサービスと通信する。 ⇒WEBサイトと送信先のメールサービスは別となっております。違う意味でしたら申し訳ありません。  WEBサーバにもメールサーバがあるか、経由しているかは現在確認中です。 >「通信について、セキュリティ対策する必要はあ」るかという質問ですが、微妙なラインですね。TLS >による暗号化をした方がよいと思いますが、「必要」とまでは言えないと思います。 ⇒必要とまでは言えない根拠がありましたら教えて頂けますでしょうか。 >加えてメールヘッダインジェクション対策は必須ですが、PHPMailer側で対策されているかもしれません。 ⇒メールヘッダインジェクションの対応が必要な旨、承知致しました。 >参照されている回答をみましたが、「1つ1つセキュリティ対策をするよりも、既に存在するメール送信>ライブラリを使用したほうが良いとの回答」はないように思います。どの回答・どの文を指していますか? ⇒te2jiさんの以下回答を参考にしました。曲解しているだけかもしれません。 >また、実際にメール機能を使用する場合は、「mb_send_mail」は使用せず、PHPMailer 等のライブラ>リを使用することをオススメします。 >認証やヘッダの加工等、メール送信に必要なことをセキュアに自分で実装しようとするとけっこう大変>です。
Tiroze

2018/08/02 08:27

>namdaさん ご回答ありがとうございます。 SMTPサーバを自作する予定はございません。 「WebARENA」というサービスを使用しているので、そこのSMTPサーバを使用しているはずです。 (メールの仕組みを理解しきれておらず、「はずです」との回答になってしまいます、すみません。)
ockeghem

2018/08/02 11:06

> ⇒WEBサイトと送信先のメールサービスは別となっております。違う意味でしたら申し訳ありません。 > WEBサーバにもメールサーバがあるか、経由しているかは現在確認中です。 ここは話がかみ合ってないように思えますね。 WebARENAという言葉が出てきました。レンタルサーバーのWebARENAですよね。 レンタルサーバーであれば、WebもメールもWebARENAを利用するのだと思います。 そして、メールフォーム → WebARENAのメールサーバー → 外部のメール受信者 という順でメールが送られるのだと思います。 WebARENAのメールサーバー → 外部のメール受信者は、WebARENAまかせですので大丈夫と思いますし、仮に何かしたくても手は出せません。 問題は、メールフォーム → WebARENAのメールサーバー の接続です。ここがどうなっているかは、PHPMailerの組み込みをしている人は分かるはずですがね。 >>「通信について、セキュリティ対策する必要はあ」るかという質問ですが、微妙なラインですね。TLS >>による暗号化をした方がよいと思いますが、「必要」とまでは言えないと思います。 >⇒必要とまでは言えない根拠がありましたら教えて頂けますでしょうか。 ひょっとしてお仕事で構築している案件の質問でしょうか。であれば、回答はしかねます。それはわたくし自身の仕事であるということと、他社の案件の「セキュリティ対応しなくてよい保証」はできかねるという理由からです。 > ⇒te2jiさんの以下回答を参考にしました。曲解しているだけかもしれません。 >>また、実際にメール機能を使用する場合は、「mb_send_mail」は使用せず、PHPMailer 等のライブラ>リを使用することをオススメします。 >>認証やヘッダの加工等、メール送信に必要なことをセキュアに自分で実装しようとするとけっこう大変>です。 te2jiさんの指摘は妥当なものですが、これを「1つ1つセキュリティ対策をするよりも…」と書いてしまうと、その前に書いてあったXSSやCSRFまでPHPMailer側でしてくれると受け取れますので、それは違うというです。
Tiroze

2018/08/03 06:49

ご回答ありがとうございます。内容理解できました。参考にさせて頂きます。
guest

0

ベストアンサー

メールフォームは、一般的な Web アプリと違い、以下のような特徴を持ちます。
・個人認証を行わない状態で使用することが多い
・スパムの発射台として利用されると被害が大きい
・メールという別アプリケーションを使用するため、そちらの知識が必須

最低限、上記を満たすメールフォームの機能は以下のとおりです。
・連続投稿対策
・外部からの直接投稿対策
・メールアドレスの実在検証

これに加えて
・送信サーバのセキュアな設定

も必要となります。

メールフォームは、きちんとセキュリティ要件を整理しておかないと他人に対して迷惑をかけてしまいます。
この要件定義のハードルはそれほど低くありません。
実際の攻撃を知っていないと対策できないですし、オープンにされた情報は少ないです。

また、アプリケーションをまたいだ要件対応が必要となるため、ライブラリでは対応はできません。容易に実装するのであれば、自身の必要とする要件をきちんと定義し、送信サーバを含むメールフォームの SaaS を比較して導入することをオススメします。

メールフォームに関しての学習をしたいと言うことであれば、まずはメールの仕組みから学習してください。どちらかと言うと、送信サーバをセキュアに保つことのほうが、闇が深いことに気がつけると思います。

で、送信サーバがセキュアに保てた後の話になりますが、メールフォームに関して、包括的な実践ライブラリは見たことがないです。連続投稿対策がネックになっており、こちらは自前で実装する必要があります。
あまり参考になる情報はありませんが、私は匿名掲示板の要件を参考にしました。

いろいろ書きましたが、自動返信を行わなければ、かなり楽ができます。
参考まで。

投稿2018/08/01 01:18

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

Tiroze

2018/08/02 07:55

>最低限、上記を満たすメールフォームの機能は以下のとおりです。 >・連続投稿対策 ⇒連続投稿対策は、送信先が固定の場合も対策必要でしょうか。  対策必要な理由を教えて頂けますでしょうか。  送信先がフォームのメールアドレス欄を参照する場合、  連続で不特定多数に送信されるのを抑えるために対策は必要だと思っています。 >・外部からの直接投稿対策  ⇒外部からメールフォームを利用して送信ができるのでしょうか。   サーバ側の項目の必須チェックやメールアドレス形式チェック、   遷移前のページと遷移後のページのtokenを比較し一致する事の確認(CSRF対策)を   行うことで対応可能でしょうか。 >・メールアドレスの実在検証   これは、メール送信先が固定(実在している事が分かっている)場合、   対応は不要でよろしいでしょうか。 >これに加えて >・送信サーバのセキュアな設定   ⇒SSLで暗号化する対応が思いつきましたが、    それだけですと足りないでしょうか。    送信サーバと受信サーバ間のセキュリティが担保できていない    ので問題があるかと思慮しております。 >また、アプリケーションをまたいだ要件対応が必要となるため、ライブラリでは対応はできません。容>易に実装するのであれば、自身の必要とする要件をきちんと定義し、送信サーバを含むメールフォーム>の SaaS を比較して導入することをオススメします。 SaaSの比較ポイントはありますでしょうか。 最低限満たすメールフォームとして記載頂いた以下3つでしょうか。 ・連続投稿対策 ・外部からの直接投稿対策 ・メールアドレスの実在検証 なお、必要とする要件は以下を考えております。 ・自動返信は行わず固定のメールアドレス(PHPソース上に定義)に送信する。 ・送信元のメールアドレスは入力欄のメールアドレスを使用 ・問い合わせ者の入力された情報が流出しない事を考慮する  (例:想定外の宛先へのメール送信) ・フォームからスクリプト実行がされない事を考慮する ・お問い合わせ以外のメッセージが送信先に送信されない事を考慮する  (大量のメール送信されることの負荷が起こらない事。) >いろいろ書きましたが、自動返信を行わなければ、かなり楽ができます。 自動返信は行わない予定です。
退会済みユーザー

退会済みユーザー

2018/08/02 09:21

自動返信を行わない場合、かなりゆるくて構わないと思いますが、やはり以下は必要かと。追記していきます。 ・連続投稿対策 大量の spam を受け取ってしまうと、必要なメールにたどり着くことができなくなります。また、一般的に受信側のアカウントは受信容量に限度があり、それを超えると受け取れなくなります。 不必要な spam はフィルタされるべきです。 ・外部からの直接投稿対策 CSRF 対策で良いです。ただ、正しい実装が必要です。 ・メールアドレスの実在検証 自動返信を行わない場合、それほど優先度は高くないです。 ただ、おかしな問い合わせをシステム的にチェックすることで、余計な受信メールを減らすことができるので、ドメインの確認程度は実施しておきたいです。 自動返信をしないのであれば、SMTP サーバ以外は適当なライブラリを使用した自前構築でも良いかと思います。 > 送信サーバのセキュアな設定 ここで送信サーバと言っているのは、一般的に SMTP サーバを指します。SMTP サーバを自前で用意しないようなので、それほど気にする必要はないと思いますが ・踏み台対策 ・ドメインの適切な取扱 ・適切な認証 等々、めんどくさいことが山積みです。ある程度理解しておくと、SMTP サービスの信頼性を判別するという意味で有用です。
Tiroze

2018/08/03 06:40

ご回答ありがとうございます。参考になりました。
guest

0

ユーザーがweb上で入力したものが自分(サーバー側の指定した人)に送られるなら
多少のやんちゃをされても被害を被るのは自分だけなので問題ないでしょう
これがweb入力したもの宛先が不特定多数を指定できるならスパムの温床になります

投稿2018/08/01 00:48

yambejp

総合スコア114769

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

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

Tiroze

2018/08/02 07:58

ご回答ありがとうございます。 サーバ側で指定した人に送られるようにする想定でおります。 想定される送信先への被害だけならまだいいのですが、それ以外の方に迷惑をかける場合を考慮したく思っております。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問