我发现自己正在研究其他开发人员的代码。他自己承认,他只是一个初学者,所以我想提出可靠的建议。
我遇到了这个:
<?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(),但我的本能是用极端的偏见来消毒所有东西。是否存在任何特定的危险,或者是否有足够技能的人会造成一些损害?
答案 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()
的示例,但它并不意味着它是不可能的。