在使用PHP的邮件命令中使用未经过消毒的后期数据是否有任何危险?

时间:2015-12-22 02:58:53

标签: php forms security email

我发现自己正在研究其他开发人员的代码。他自己承认,他只是一个初学者,所以我想提出可靠的建议。

我遇到了这个:

<?php

$headerFields = array(
        "From: ".$_POST[...],
        "MIME-Version: 1.0",
        "Content-Type: text/html;charset=utf-8"
    );

    mail("submissions@[...].com","Submission to [...] from " . $_POST[...] . "","New submission to [...]

    Name*: " . $_POST[...] . " [...big-snip...]",
    implode("\r\n", $headerFields)
    );

(很明显地编辑了)

我倾向于不经常使用mail(),但我的本能是用极端的偏见来消毒所有东西。是否存在任何特定的危险,或者是否有足够技能的人会造成一些损害?

2 个答案:

答案 0 :(得分:3)

是的,您是正确的,用户的每个输入都需要进行清理和验证。

黄金法则:&#34;永远不要相信您的用户&#34;

一个问题是非技术用户可能会在名称中添加任何内容。例如,他们输入电子邮件而不是名称,我们不知道我们可以遇到的用户类型和类型。一些用户将输入点或甚至空格,即使标签上只有字母数字是可接受的。这可能会导致数据完整性问题。根据我的经验(从困难的方式学习),我遇到了一个用户将N / A放在他/她不知道的字段中而不是留空并且它造成了麻烦。所以验证是必须的。

另一个问题是,电子邮件中允许使用html。具有编程背景的用户可以在其中放置链接,接收者可能会点击它并可能导致恶意网站。如果我放在那里(替换$ _POST)也是如此。它会破坏您的标题字段并可能导致问题。:

$headerFields = array(
    "From: ". "\r\n FROM: DERP\r\n TO: IWANTTODESTROYTHEWORLD\r\n WOW: ASDASD\r\n MIME-Version: wow",
    "MIME-Version: 1.0",
    "Content-Type: text/html;charset=utf-8"
);

上面的示例并不是那么危险,会/可能只会产生错误,但有些用户可能会有额外的功能来注入恶意代码,所以要清理它并进行正确的验证是必须的

答案 1 :(得分:1)

有足够的技能可以在发布的字段中注入一些恶意代码并执行它。即:修改标题。

http://securephpwiki.com/index.php/Email_Injection

关于纯PHP注入,我的快速搜索无法找到mail()的示例,但它并不意味着它是不可能的。