学習忘備録

学習のアウトプットや感じた事を発信していきます

メール送信の問題

書籍を読んで

www.amazon.co.jp

こちらの書籍を読んでWebアプリケーションを作る際に重要な要点を自分用としてアウトプットします。

メール送信の問題

Webアプリケーションには、利用者への確認や通知の目的でメール送信の機能を持つものがあり、メール送信機能に不備があると、第三者のメール中継や、意図とは異なるメール送信の可能性がある

メール送信の問題は以下が知られている

  • メールヘッダ・インジェクション脆弱性
  • hiddenパラメータによる宛先保持
    • 送信先メールアドレスなどは、hiddenパラメータに保持するのではなく、サーバ上の安全な場所(ファイルやデータベースなど)に保持するべき
  • メールサーバによる第三者中継
    • (アプリケーションが原因ではない)

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

脆弱性が生まれる原因

メールのメッセージヘッダでは、改行に特別な意味があるが、アプリケーションが改行をチェックしていない場合には、ヘッダや本文を追加・変更できることになるが、脆弱性が生まれる原因となる

対策

メール送信にsendmailコマンドなどではなく、メール送信の専用ライブラリを使用することが推奨される

  • メール送信には専用のライブラリを使用する

その上で、以下のいずれかを実施する

  • 外部からのパラメータをメールヘッダに含ませないようにする
  • 外部からのパラメータには改行を含ませないようにメール送信時にチェックする
保険的な対策
  • メールアドレスのチェック
    • Webサイト毎に、メールアドレスの仕様を要件として定め、その要件にマッチしているかどうかを入力値検証として検査する
  • 件名のチェック
    • 件名は、書式や文字種の制限がないことから、「制御文字以外にマッチする」正規表現を用いてチェックする
    • 改行文字も制御文字の一種なので、これでチェックできる