-1

我在网上找到了以下联系表格脚本,我想知道它是否安全,如果不是这样我可以使它更安全。我刚刚回到我认为我很久以前获得代码的页面,我看到一位评论者说:

“客户端验证仅用于用户方便,它不会阻止垃圾邮件、黑客或烦人的网络开发人员。黑客所要做的就是创建自己的 HTML 文件而不使用 javascript。垃圾邮件机器人甚至不会使用他们的表单”我只会解析它的 id 并发送原始数据包。始终检查服务器上的输入,永远不要信任用户。”

我不确定这意味着什么,但希望如果有人在下面的代码中看到漏洞,评论可能更有意义:

<?php

$EmailFrom = Trim(stripslashes($_POST['Email']));
$EmailTo = "info@mysite.com";
$Subject = "Customer Inquiry from MySite.com";
$Name = Trim(stripslashes($_POST['Name'])); 
$Tel = Trim(stripslashes($_POST['Tel'])); 
$Email = Trim(stripslashes($_POST['Email'])); 
$Message = Trim(stripslashes($_POST['Message'])); 

// validation
$validationOK=true;
if (!$validationOK) {
  print "<meta http-equiv=\"refresh\" content=\"0;URL=http://www.mysite.com/contact-us-error.php\">";
  exit;
}

// prepare email body text
$Body = "";
$Body .= "Name: ";
$Body .= $Name;
$Body .= "\n";
$Body .= "Tel: ";
$Body .= $Tel;
$Body .= "\n";
$Body .= "Email: ";
$Body .= $Email;
$Body .= "\n";
$Body .= "Message: ";
$Body .= $Message;
$Body .= "\n";

// send email 
$success = mail($EmailTo, $Subject, $Body, "From: <$EmailFrom>");

// redirect to success page 
if ($success){
  print "<meta http-equiv=\"refresh\" content=\"0;URL=http://www.mysite.com/contact-us-success.php\">";
}
else{
  print "<meta http-equiv=\"refresh\" content=\"0;URL=http://www.mysite.com/contact-us-error.php\">";
}
?>

谢谢参观

4

1 回答 1

0

你需要了解为什么有些事情不安全,而不是在你不知道的时候问别人。

首先,您提到了客户端验证。您尝试验证客户端是否有任何限制?例如,是否有 javascript(或者可能是 HTML 属性)阻止用户在电子邮件正文中输入超过一定数量的字符?

如果是这样,并且您将此视为安全漏洞,则该页面不安全。如果我想以这种方式滥用您的网站,我无法仅通过使用浏览器以正常方式访问该网站来做到这一点。但这并不能阻止我通过网络发送我想要的任何东西。我可以使用 curl ( http://curl.haxx.se/ ) 向您的服务器发送长请求;您的服务器将无法知道它不是来自浏览器,不会检查其长度,并且会发送电子邮件。

攻击者还有另一种方式可以将服务器用于它显然不打算用于的事情。也就是说,他们可以添加额外的标题。例如,假设他们想添加 header MyHeader: something malicious。他们可以发送一个请求,其中$_POST['Email']包含以下字符串:

me@example.com>\r\nMyHeader: something malicious\r\nJunkHeader: junk

然后,字符串"From: <$EmailFrom>"将如下所示:

From: <me@example.com>
MyHeader: something malicious
JunkHeader: junk>

这些是将要发送的标头。(我添加了一行垃圾,这样最后的额外内容>就不会作为 MyHeader 的一部分出现,干扰我正在尝试的任何邪恶计划。)

想必是因为这个漏洞,根据http://uk1.php.net/manual/en/function.mail.php:“additional_parameters参数在safe_mode中被禁用,mail()函数在使用时会暴露警告信息并返回FALSE。” (从 PHP4.2.3 开始。)

为了解决这个问题,我认为检查不$EmailFrom包含换行符就足够了,如果包含则拒绝发送电子邮件。

于 2013-09-12T22:00:31.507 回答