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

当然,在使用MySQL时,请使用mysqli_real_escape_string()并检查接收到的输入类型是否为您期望的类型(字符串,数字等),并且可以确定可以mysqli_query()安全地将其用作输入…对吗?

好吧,问题是:

  • 转义将在其中使用的字符串的最佳方法是什么mail()
  • 如果电子邮件收件人将是在文本字段中输入的电子邮件地址,那么我应该注意哪些事项以避免注入或利用?

我有一个很好的主意,该如何做,但是我正在研究有关此主题的最佳实践,以了解是否遗漏了某些东西,或者是否有更好的方法。


编辑:这个问题的想法是不具备 答案,而是要让所有的事情打理用PHP写电子邮件时的全面合作名单。

回答:

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

最佳实践是依靠编写良好,经常更新且使用广泛的代码。为此,我建议使用PEAR_MAIL或Zend_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);

}

以上是 要在mail()中使用的转义字符串 的全部内容, 来源链接: utcz.com/qa/401436.html

回到顶部