メール送信の問題
書籍を読んで
こちらの書籍を読んでWebアプリケーションを作る際に重要な要点を自分用としてアウトプットします。
メール送信の問題
Webアプリケーションには、利用者への確認や通知の目的でメール送信の機能を持つものがあり、メール送信機能に不備があると、第三者のメール中継や、意図とは異なるメール送信の可能性がある
メール送信の問題は以下が知られている
- メールヘッダ・インジェクション脆弱性
- hiddenパラメータによる宛先保持
- 送信先メールアドレスなどは、hiddenパラメータに保持するのではなく、サーバ上の安全な場所(ファイルやデータベースなど)に保持するべき
- メールサーバによる第三者中継
- (アプリケーションが原因ではない)
メールヘッダ・インジェクション
脆弱性が生まれる原因
メールのメッセージヘッダでは、改行に特別な意味があるが、アプリケーションが改行をチェックしていない場合には、ヘッダや本文を追加・変更できることになるが、脆弱性が生まれる原因となる
対策
メール送信にsendmailコマンドなどではなく、メール送信の専用ライブラリを使用することが推奨される
- メール送信には専用のライブラリを使用する
その上で、以下のいずれかを実施する
- 外部からのパラメータをメールヘッダに含ませないようにする
- 外部からのパラメータには改行を含ませないようにメール送信時にチェックする
保険的な対策
- メールアドレスのチェック
- Webサイト毎に、メールアドレスの仕様を要件として定め、その要件にマッチしているかどうかを入力値検証として検査する
- 件名のチェック
- 件名は、書式や文字種の制限がないことから、「制御文字以外にマッチする」正規表現を用いてチェックする
- 改行文字も制御文字の一種なので、これでチェックできる