13

変数をエスケープせずに PHP でメール本文を生成しているため、少しぎこちなく感じています。HTML では、htmlspecialchars() または同様の関数をコマンドラインの escapeshellarg() に使用していますが、メールには? たとえば、次のようなものです。

<?php
$usercontent = $_GET['usercontent'];
mail("dummy@nowhere.tld", "My Subject", "My body with $usercontent included");
?>

攻撃者は上記のようなスクリプトを使用して何ができるでしょうか?また、そのような攻撃からどのように保護すればよいでしょうか? または、PHP mail() は保存され、その理由は何ですか?

アップデート

例を参照してください。

  • ボディのみが影響を受けます (ヘッダーはありません!)
  • Content-Type は text/plain です
  • 答えに対するいくつかの証拠はいいでしょう
  • MTA は、「/usr/sbin/sendmail -t -i」を使用した後置 sendmail です。
4

4 に答える 4

6
于 2013-04-17T16:27:22.167 に答える
0

メールの本文を次のように考えてみてください。「ミッション 極秘の宛先不明」。どのような種類のクライアントがメッセージを読むかはわからないかもしれませんが、ライブの、ユーザーが提供する、エスケープされていない HTML がメッセージに表示されることを望まないことは推測できます。多くのクライアントは HTML でメールを読むためhtmlentities()、ユーザーが提供する電子メール本文に対して行うのが最善です。

私のエスケーパー クラスのメソッド。

<?php
class escaper
{
    public function superHtmlEntities($string)
    {
        return htmlentities($string, ENT_QUOTES | ENT_HTML5, 'UTF-8', true);
    }
}
?>

========================================

調査を行う際には、少なくとも、このようなことなどを検討してください。

<?php
$esc = new Escaper();

$usercontent = $_GET['usercontent'];
mail("dummy@nowhere.tld", "My Subject", $esc->superHtmlEntities("My body with $usercontent included"));
?>
于 2015-04-30T17:39:11.490 に答える