我感觉有点尴尬,因为我正在使用PHP生成邮件正文而不会转义变量。在HTML中我使用htmlspecialchars()或类似函数,命令行escapeshellarg(),但对于邮件?例如:
<?php
$usercontent = $_GET['usercontent'];
mail("dummy@nowhere.tld", "My Subject", "My body with $usercontent included");
?>
可能的攻击者可能会对上面的脚本做什么,我怎么能防止这种攻击呢?或者是PHP mail()保存,为什么?
更新
请参阅示例:
答案 0 :(得分:4)
基本的电子邮件正文是纯文本。如果您需要不同的类型(如HTML或多部分消息),则需要使用MIME扩展并使用 Content-Type 相应地指定类型(例如,对于HTML text/html
或multipart/…
对于多部分消息)。
因此从安全角度来看,没有办法注入任何有害的东西(至少不符合规范)。即使没有声明使用的字符编码,也应该正确处理非ASCII字符。
但是,电子邮件客户端中仍可能存在一些可以通过这种方式利用的漏洞。但我对此表示怀疑。
答案 1 :(得分:0)
它不受XSS攻击保护,因为如果您的邮件包含HTML,则有人可以将其注入邮件。
良好的行为是检查和预期您拥有的有效数据。如果我是你,我会逃避这个字符串。它没有任何成本,你不必担心不使用它的后果。
答案 2 :(得分:0)
好问题。我不相信你需要逃避正文,但我知道如果你允许用户输入一个地址,就可以在邮件中添加标题(如BCC到数千个地址)。因此,如果您将变量放入其中,请务必检查换行符(\n
和\r
),以确保不添加其他标题。