您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

要在mail()中使用的转义字符串

要在mail()中使用的转义字符串

电子邮件注入背后的想法是,攻击者在电子邮件标题中注入换行符(LF),因此他可以添加任意数量标题删除这些换行符可以保护您免受这种攻击。有关详细信息,请访问http://www.phpsecure.info/v2/article/MailHeadersInject.en.php

最佳实践是依靠编写良好,经常更新且使用广泛的代码。为此,我建议使用PEAR_MAILZend_Mail

如果您不想加载这些模块,或者需要保持非常简单。您可以从这些模块中提取过滤功能。尽管我确实建议使用它们并经常更新库,以便将来出现新的攻击时,您只需要更新库(Pear或Zend)就可以了。

这是清除Pear Mail包中的标头的函数

function _sanitizeHeaders(&$headers)
{
    foreach ($headers as $key => $value) {
        $headers[$key] =
            preg_replace('=((<CR>|<LF>|0x0A/%0A|0x0D/%0D|\\n|\\r)\S).*=i',
                         null, $value);
    }
}

Zend_Mail对电子邮件名称和其他字段使用不同的过滤器:

function _filterEmail($email)
{
    $rule = array("\r" => '',
                  "\n" => '',
                  "\t" => '',
                  '"'  => '',
                  ','  => '',
                  '<'  => '',
                  '>'  => '',
    );

    return strtr($email, $rule);
}

function _filterName($name)
{
    $rule = array("\r" => '',
                  "\n" => '',
                  "\t" => '',
                  '"'  => "'",
                  '<'  => '[',
                  '>'  => ']',
    );

    return trim(strtr($name, $rule));
}

function _filterOther($data)
{
    $rule = array("\r" => '',
                  "\n" => '',
                  "\t" => '',
    );

    return strtr($data, $rule);
}
其他 2022/1/1 18:16:25 有591人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶