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

时间:2013-04-17 12:07:39

标签: email security sendmail postfix-mta php

我感觉有点尴尬,因为我正在使用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是一个后缀sendmail,带有“/ usr / sbin / sendmail -t -i”

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:0)

它不受XSS攻击保护,因为如果您的邮件包含HTML,则有人可以将其注入邮件。

良好的行为是检查和预期您拥有的有效数据。如果我是你,我会逃避这个字符串。它没有任何成本,你不必担心不使用它的后果。

答案 2 :(得分:0)

好问题。我不相信你需要逃避正文,但我知道如果你允许用户输入一个地址,就可以在邮件中添加标题(如BCC到数千个地址)。因此,如果您将变量放入其中,请务必检查换行符(\n\r),以确保不添加其他标题。