此联系表单电子邮件脚本是否安全
Is This Contact Form Email Script Secure
我在网上找到了以下联系表单脚本,我想了解它是否安全,如果不是,我如何使其更安全。我刚刚回到我认为我很久以前得到代码的页面,我看到一位评论员说:
"客户端验证仅适用于用户会议,它不能防止垃圾邮件,黑客或烦人的Web开发人员。黑客所要做的就是在没有javascript的情况下创建自己的HTML文件。垃圾邮件机器人甚至不会使用这种形式,他们只会解析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'">";
}
?>
感谢您的观看
你需要了解为什么有些事情不安全,而不是在你不知道的时候问别人。
首先,您提到了客户端验证。是否有任何约束正在尝试验证客户端?例如,是否有javascript(或者可能是HTML属性)可以阻止用户在电子邮件正文中键入超过一定数量的字符?
如果是这样,并且如果您将其视为安全漏洞,则该页面不安全。如果我想以这种方式滥用您的网站,我不能仅通过浏览器以正常方式访问该网站来做到这一点。但这并不能阻止我通过网络发送任何我想要的东西。我可以使用类似 curl ( http://curl.haxx.se/) 的东西向您的服务器发送长请求;您的服务器将无法知道它不是来自浏览器,不会检查其长度,并且会发送电子邮件。
攻击者还有另一种方式可以将服务器用于显然不打算用于的事情。也就是说,他们可以添加额外的标头。例如,假设他们想要添加标头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
是否不包含换行符就足够了,如果包含,则拒绝发送电子邮件。
- 当eval只执行服务器端数据时,在javascript中使用eval是否安全
- 假设浏览器渲染为60 fps是否安全
- 如果条件将长 JavaScript 拆分为多行是否安全
- 如何检测在 Javascript 中使用“in”运算符是否安全
- 为用户应用程序托管 javascript 文件是否安全
- 使用AngularJS是否安全
- 在JavaScript源代码中使用UTF-8字符文字是否安全
- 每隔1秒调用一次jQueryajax是否安全
- 使用Ajax提交表单是否安全
- 重新触发Javascript事件是否安全
- 使用for.of迭代时删除集合中的元素是否安全
- jQuery(userInput)对最终用户来说是否“安全”
- JavaScript 在表单中注入密码是否安全
- 如果没有其他用户会看到未转义的用户输入,渲染它是否安全
- 是否安全应用是最佳实践
- 使用 Restangular 使用 RESTful API - RESTful API 将数组作为顶级对象返回是否安全
- 网络套接字是否安全
- 在循环时修改数组是否安全
- HTML 文本框值属性是否安全免受 XSS 攻击
- 在 JavaScript 中依赖全局本机对象是否安全,尤其是 Object 对象