当只有$ text是用户输入时,注入到mail命令

时间:2012-04-03 13:03:17

标签: php security

以下PHP脚本是否存在注入安全风险?

<?php
$empfaenger_1 = "test@example.com";
$sender = "test@example.com";

$name = $_POST['name'];
$telefon = $_POST['phone']; 
$betreff = "Test";

$text =
"Please contact me

Name: $name
Telefon: $telefon";

mail($empfaenger_1, $betreff, $text,"from:$sender");

$url = htmlspecialchars($_SERVER['HTTP_REFERER']);
echo "<center><br><br>Thank you<br><br>";
echo "<center><a href='$url'>Back</a>";

4 个答案:

答案 0 :(得分:4)

我认为邮件注入只能在标题字段中使用。我不知道邮件注入正文中。

无论如何要注意XSS,你应该使用strip_tags():

$name = strip_tags($_POST['name']);
$telefon = strip_tags($_POST['phone']); 

答案 1 :(得分:2)

注入mail

这里的风险很小。这里有几个答案指出HTML注入电子邮件的可能性。对于HTML电子邮件,这是可能的,但HTML邮件消息将Content-type标头设置为text/html或作为多部分邮件的一部分。 RFC 1521规定必须明确设置HTML内容类型,如果没有指定内容类型,则纯文本是默认的:

  

默认RFC 822消息由此协议键入US-ASCII字符集中的纯文本,可以明确指定为“Content-type:text / plain; charset = us-ascii”。如果未指定Content-Type,则假定为此默认值。

在上面的代码中,用户提供的文本插在标题之后;攻击者没有机会更改内容类型(HTML或多部分,后者允许注入MIME边界)。

最终结果不能是纯文本消息。如果用户在邮件中注入HTML标记,则阅读该电子邮件的人将在邮件中看到这些HTML标记。电子邮件客户端通常不会机会性地检查明文消息以查找和解析嵌入的HTML和JavaScript。

在其他地方注射

虽然使用mail可能是安全的,但其余代码中可能存在注入漏洞:

$url = htmlspecialchars($_SERVER['HTTP_REFERER']);
echo "<center><a href='$url'>Back</a>";

默认情况下,htmlspecialchars使用ENT_COMPAT | ENT_HTML401标记,这些标记不会将单引号转换为&amp;#039;。链接href属性用单引号分隔。因此,如果攻击者可以强制HTTP引用来包含单引号,则他/她可以调用常规XSS攻击。 (例如,如果引用者被强制转换为等效的http://whatever/a' onclick='alert(),则单击该链接可以调用任意JavaScript。要解决此问题,请将“$url”置于双引号的第二行,或者调用{带有htmlspecialchars标记的{1}}。

答案 2 :(得分:1)

如果客户端以html视图模式打开电子邮件,并且用户注入脚本,那么是的,它很容易被XSSCSRF扩展。当然,你应该sanitize all untrusted input

可以在OWASP web site找到更具体的XSS保护信息。

答案 3 :(得分:1)

有可能是的,可以注入javascript代码,例如,如果有人把它作为他们的名字:

<script type="text/javascript">

window.location = "http://www.google.com/"

</script>

任何查看该名称的人都将被重定向到google.com;你可以这样说:

$name = htmlentities(strip_tags($_POST['name']));