質問は簡単です:PHPmailerクラスを使用する場合、任意のタイプのサニタイズを使用する必要がありますか?
phpmailerクラスを使用してメールを送信する簡単なメール送信フォームを作成しました。現在、私はサニタイズに「htmlspecialchars」のみを使用しています(これは必要ないことを読みましたが、この情報は100%信頼できるものではありません)。
タグ間でjsコードを送信しようとしましたが、サニタイズされた状態で受信しましたが、他の種類の攻撃を実行できるかどうかはわかりません。
入力したメールアドレスが有効なメールアドレスであるかどうかを確認する以外は、phpMailerに送信する前に何もサニタイズする必要はありません。
データのサニタイズには2つの理由があります。SQLインジェクションとXSSまたはCSRF(クロスサイトスクリプティングまたはクロスサイトリクエストフォージェリ)いずれの場合も、ユーザーは入力に基づいて何かを出力として表示する必要があります。
ただし、メールクラスのサニタイズについて質問したのは良いことです。理想的には、誰もそれを要求しないからです。HTMLタグ?もちろん、HTMLタグを送信することもできます。コンテンツタイプは次のように定義できますtext/html
何を消毒する必要がありますか?
アタッチメントタイプ!メールクライアントのエクスプロイトに関係なく、常に添付ファイルに含まれています。次のmimeタイプのみを許可します。
image / jpeg'、' image / pjpeg'、' image / gif'、' image / png'、' application / msword'、' application / vnd.ms-office'、' application/vnd.openxmlformats-officedocument.wordprocessingml。 document'、' application / vnd.openxmlformats-officedocument.wordprocessingml.template'、' application / vnd.openxmlformats-officedocument.spreadsheetml.sheet'、' application / vnd.openxmlformats-officedocument.presentationml.presentation'、' application / pdf '
ファイルの拡張をチェックすることはお勧めしません!メールクライアントは、ブラウザでファイルを開くだけのget_file_contents()のような関数を使用する可能性があり、JPEGの拡張子が埋め込まれたjavascriptの場合は、引き続き実行されます。(IE6 / IE7ではそうしました)しかし、これも強力な解析メカニズムを持つブラウザの仕事です。コンテンツスニッフィング
サイズ制限があることを確認してください。
エクスプロイトはメールに含まれる場合と含まれない場合があり、メールクライアントがそれを処理する必要があります。ただし、メーラーエンドコーダーとして、これらは注意が必要な2つのことです。
お役に立てば幸いです:)
私は個人的に入力を信用しないので、すべてをサニタイズします。たとえば、htmlspecialcharsを使用している可能性がありますが、誰かが英語以外の文字を使用するとどうなりますか?文字セットを定義するためのパラメーターとしてUTF-8を使用する必要があります。
この単純な省略(そして、あなたがそれを省略したとは決して言えません)は、XSS攻撃を引き起こす可能性があります。
私の投票はHTMLPurifierに行きます。これは非常によく知られた安全なライブラリであり、htmlspecialcharsよりもはるかに高度に入力をサニタイズすることができます。
/0.02