在邮件正文中引用/转义变量

Tre*_*her 12 php security email postfix-mta sendmail

我感觉有点尴尬,因为我使用PHP生成邮件正文而不会转义变量.在HTML中我使用htmlspecialchars()或类似函数,命令行escapeshellarg(),但对于邮件?例如这样的事情:

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

一个可能的攻击者可能会对上面的脚本做什么,我怎么能防止这样的攻击呢?或者是PHP mail()保存,为什么?

更新

请参考示例:

  • 只有身体受到影响(没有标题!)
  • Content-Type是text/plain
  • 答案的一些证据会很好
  • MTA是一个后缀sendmail,带有"/ usr/sbin/sendmail -t -i"

Gum*_*mbo 5

基本的电子邮件正文是纯文本。如果您想要其他类型(例如HTML或多部分消息),则需要使用MIME扩展名,并使用Content-Type(例如,text/html对于HTML或多multipart/…部分消息)相应地指定类型。

因此,从安全角度来看,没有办法注入任何有害的东西(至少不是按照规范)。即使缺少使用的字符编码的声明,即使非ASCII字符也应正确处理。

但是,电子邮件客户端中仍然可能存在一些漏洞,可以通过这种方式加以利用。但我对此表示怀疑。


Rob*_*ert 0

它不能防止 XSS 攻击,因为如果您的邮件包含 HTML,有人可以将其注入邮件中。

良好的行为是检查您期望拥有的有效数据。如果我是你,我就会逃避这个字符串。它几乎不需要花费任何费用,而且您不必担心不使用它的后果。