在一个简单的联系人表单中,HTML表单触发Php脚本:
<form method="post" action="email.php">.....</form>
这封电子邮件.php给我发了一封电子邮件:
<?php
$mess=$_POST['name']. "'r'n" .$_POST['site']. "'r'n" .$_POST['email']. "'r'n" .$_POST['meta']. "'r'n" .$_POST['message'];
mail('myemail@gmail.com', 'Subject', $mess);
?>
HTML使用的是jQuery验证插件,但在Php方面没有这样的插件。
一位安全专家告诉我这个php脚本是多么的不安全。
我可以做些什么来增强安全性?
我的猜测是,你的"安全专家"看到你使用原始$_POST
数据和mail()
函数,他吓坏了,但并没有停下来检查情况有多糟糕。
他有一点是,在不进行任何验证的情况下使用$_POST
几乎总是会被黑客入侵,但事实上,在这种特殊情况下,我不认为这太糟糕,因为你是唯一的收件人(所以它不会被用于垃圾邮件,这是这些情况下最需要担心的),因为正文是纯文本(所以黑客不能向你发送任何讨厌的脚本或附件)。
如果没有任何验证,你可能会收到一些非常奇怪的电子邮件,因为黑客试图找到绕过你防御的方法,但不会收到太多其他电子邮件。
PHP的mail()
函数是众所周知的黑客软目标,因为有很多不安全的代码在使用它。然而,mail()
的真正危险往往是如果你使用了headers
参数(即设置发件人地址等),而你没有使用过。由于您没有使用headers
,因此风险要低得多,而且主要局限于让别人很容易给您邮寄邮件。
如果您仍然担心mail()
函数的安全性,最好的解决方案是使用phpMailer这样的库。
老实说,每当有人想使用PHP的mail()
函数时,我的建议总是使用phpMailer或Swiftmailer。这甚至不仅仅是安全问题;即使对于简单的情况,它们也可以使代码更易于阅读和维护。
一个大缺陷是,攻击者可能会在你的收件箱里塞满恶意或垃圾邮件,这些邮件除了非常烦人之外,还可能导致谷歌将你的域名列入垃圾邮件列表。
他们可以通过编写一个简短的脚本来调用带有一些任意数据的PHP函数,并根据需要循环使用该函数。
这是解决您所需问题的另一种方法。我希望这对其他提问者有用,因为我看到类似的问题连续出现。
如果你打算进行专业应用并专注于你的核心业务,那么我建议你使用一些带有API的安全电子邮件门户,如mailgun、mandrill或其他。这两项服务都提供了一个仪表板,您可以在其中查看电子邮件状态、发送的电子邮件数量和发送状态,以及许多其他统计数据。小规模使用是免费的。使用它是值得的,因为您将解决以下一些问题:
- 您不需要考虑维护smtp服务器的安全性
- 甚至可以正确配置smtp
- 解决块和黑IP地址
- 服务器攻击
- 垃圾邮件问题
- 并命名更多
两种解决方案都为PHP或其他平台提供API。
注意:几年前,我一直在自己使用我自己的smtp服务器,你知道,我花在修复和维护smtp服务器上的所有时间都不值得,因为我可以把这些时间花在做更好的事情上,把电子邮件服务部分留给专业人士。