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

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

ただいまの
回答率

90.35%

  • PHP

    25496questions

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

  • セキュリティー

    555questions

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

  • メール

    329questions

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

  • CSRF

    59questions

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

  • XSS

    35questions

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

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

解決済

回答 3

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 1,731

Tiroze

score 18

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

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

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

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

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • m.ts10806

    2018/08/01 07:46

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

    キャンセル

  • Tiroze

    2018/08/02 15:26

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

    キャンセル

回答 3

+6

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/02 17:27

    >namdaさん

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

    キャンセル

  • 2018/08/02 20:06

    > ⇒WEBサイトと送信先のメールサービスは別となっております。違う意味でしたら申し訳ありません。
    > WEBサーバにもメールサーバがあるか、経由しているかは現在確認中です。

    ここは話がかみ合ってないように思えますね。
    WebARENAという言葉が出てきました。レンタルサーバーのWebARENAですよね。
    レンタルサーバーであれば、WebもメールもWebARENAを利用するのだと思います。
    そして、メールフォーム → WebARENAのメールサーバー → 外部のメール受信者 という順でメールが送られるのだと思います。
    WebARENAのメールサーバー → 外部のメール受信者は、WebARENAまかせですので大丈夫と思いますし、仮に何かしたくても手は出せません。
    問題は、メールフォーム → WebARENAのメールサーバー の接続です。ここがどうなっているかは、PHPMailerの組み込みをしている人は分かるはずですがね。

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

    ひょっとしてお仕事で構築している案件の質問でしょうか。であれば、回答はしかねます。それはわたくし自身の仕事であるということと、他社の案件の「セキュリティ対応しなくてよい保証」はできかねるという理由からです。

    > ⇒te2jiさんの以下回答を参考にしました。曲解しているだけかもしれません。
    >>また、実際にメール機能を使用する場合は、「mb_send_mail」は使用せず、PHPMailer 等のライブラ>リを使用することをオススメします。
    >>認証やヘッダの加工等、メール送信に必要なことをセキュアに自分で実装しようとするとけっこう大変>です。

    te2jiさんの指摘は妥当なものですが、これを「1つ1つセキュリティ対策をするよりも…」と書いてしまうと、その前に書いてあったXSSやCSRFまでPHPMailer側でしてくれると受け取れますので、それは違うというです。

    キャンセル

  • 2018/08/03 15:49

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

    キャンセル

checkベストアンサー

+2

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

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

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

も必要となります。

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

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

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

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

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/02 16:55

    >最低限、上記を満たすメールフォームの機能は以下のとおりです。
    >・連続投稿対策
    ⇒連続投稿対策は、送信先が固定の場合も対策必要でしょうか。
     対策必要な理由を教えて頂けますでしょうか。
     送信先がフォームのメールアドレス欄を参照する場合、
     連続で不特定多数に送信されるのを抑えるために対策は必要だと思っています。

    >・外部からの直接投稿対策
     ⇒外部からメールフォームを利用して送信ができるのでしょうか。
      サーバ側の項目の必須チェックやメールアドレス形式チェック、
      遷移前のページと遷移後のページのtokenを比較し一致する事の確認(CSRF対策)を
      行うことで対応可能でしょうか。

    >・メールアドレスの実在検証
      これは、メール送信先が固定(実在している事が分かっている)場合、
      対応は不要でよろしいでしょうか。

    >これに加えて
    >・送信サーバのセキュアな設定
      ⇒SSLで暗号化する対応が思いつきましたが、
       それだけですと足りないでしょうか。
       送信サーバと受信サーバ間のセキュリティが担保できていない
       ので問題があるかと思慮しております。

    >また、アプリケーションをまたいだ要件対応が必要となるため、ライブラリでは対応はできません。容>易に実装するのであれば、自身の必要とする要件をきちんと定義し、送信サーバを含むメールフォーム>の SaaS を比較して導入することをオススメします。
    SaaSの比較ポイントはありますでしょうか。
    最低限満たすメールフォームとして記載頂いた以下3つでしょうか。
    ・連続投稿対策
    ・外部からの直接投稿対策
    ・メールアドレスの実在検証

    なお、必要とする要件は以下を考えております。
    ・自動返信は行わず固定のメールアドレス(PHPソース上に定義)に送信する。
    ・送信元のメールアドレスは入力欄のメールアドレスを使用
    ・問い合わせ者の入力された情報が流出しない事を考慮する
     (例:想定外の宛先へのメール送信)
    ・フォームからスクリプト実行がされない事を考慮する
    ・お問い合わせ以外のメッセージが送信先に送信されない事を考慮する
     (大量のメール送信されることの負荷が起こらない事。)

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

    キャンセル

  • 2018/08/02 18:21

    自動返信を行わない場合、かなりゆるくて構わないと思いますが、やはり以下は必要かと。追記していきます。

    ・連続投稿対策
    大量の spam を受け取ってしまうと、必要なメールにたどり着くことができなくなります。また、一般的に受信側のアカウントは受信容量に限度があり、それを超えると受け取れなくなります。
    不必要な spam はフィルタされるべきです。

    ・外部からの直接投稿対策
    CSRF 対策で良いです。ただ、正しい実装が必要です。

    ・メールアドレスの実在検証
    自動返信を行わない場合、それほど優先度は高くないです。
    ただ、おかしな問い合わせをシステム的にチェックすることで、余計な受信メールを減らすことができるので、ドメインの確認程度は実施しておきたいです。

    自動返信をしないのであれば、SMTP サーバ以外は適当なライブラリを使用した自前構築でも良いかと思います。

    > 送信サーバのセキュアな設定
    ここで送信サーバと言っているのは、一般的に SMTP サーバを指します。SMTP サーバを自前で用意しないようなので、それほど気にする必要はないと思いますが
    ・踏み台対策
    ・ドメインの適切な取扱
    ・適切な認証
    等々、めんどくさいことが山積みです。ある程度理解しておくと、SMTP サービスの信頼性を判別するという意味で有用です。

    キャンセル

  • 2018/08/03 15:40

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

    キャンセル

+1

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

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/08/02 16:58

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

    キャンセル

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

  • ただいまの回答率 90.35%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る

  • PHP

    25496questions

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

  • セキュリティー

    555questions

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

  • メール

    329questions

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

  • CSRF

    59questions

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

  • XSS

    35questions

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