如何保护发送电子邮件的简单PHP脚本?

时间:2015-10-27 09:46:49

标签: php security

在简单的联系表单中,HTML表单会触发Php脚本:

<form method="post" action="email.php">.....</form>

此email.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 validate插件,但在Php方面没有这样的。

安全专家告诉我这个php脚本是多么疯狂的不安全

我可以做些什么来增强安全性?

3 个答案:

答案 0 :(得分:0)

一个很大的缺陷是,攻击者可以用恶意或垃圾邮件轻而易举地填充您的收件箱,除了非常烦人之外,还可能导致Google将您的域名置于垃圾邮件列表中。

他们可以通过编写一个简短的脚本来调用带有一些任意数据的PHP函数,并在需要的时间内遍历它。

答案 1 :(得分:0)

这是解决您要求的替代方法。我希望这对其他的问题有用,因为我看到连续出现类似的问题。

如果您打算专业应用并专注于您的核心业务,那么我建议您使用一些带有API的安全电子邮件门户,例如mailgun,mandrill或其他。这两项服务都提供了一个仪表板,您可以在其中查看发送电子邮件的数量和交付状态的电子邮件状态,以及许多其他统计信息。它是免费的小用途。使用它是值得的,因为您将解决以下一些问题:

  • 您无需考虑维护smtp服务器的安全性
  • 甚至可以正确配置您的smtp
  • 解决块和黑色IP地址
  • 服务器攻击
  • 垃圾邮件问题
  • 并命名更多

两种解决方案都为PHP或其他平台提供API。

注意:几年前我一直在使用我自己的smtp服务器,你知道我用来修复和维护smtp服务器的所有时间都不值得,因为我可以花那么多时间做更好的事情并离开专业人士的电子邮件服务部分。

答案 2 :(得分:0)

我的猜测是你的安全专家&#34;看到你使用原始$_POST数据并使用mail()函数,他吓坏了,但没有停下来实际检查事情有多糟糕。

他指出,使用$_POST而不对其进行任何验证几乎总是被黑客攻击,但实际上在这种特殊情况下,我也不认为它也是如此。糟糕,因为你是唯一的收件人(因此它不会被用于垃圾邮件,这是在这些情况下最需要担心的事情),并且因为正文是纯文本(所以黑客可以&#39 ; t发送任何讨厌的脚本或附件。)

如果没有任何验证,你可能会收到一些非常奇怪的电子邮件,因为黑客试图找到一种解决方法,但不是太多。

PHP的mail()函数是黑客众所周知的软目标,因为有大量不安全的代码使用它。但是,如果您使用mail()参数(即设置发件人地址等内容),那么headers的真正危险往往是,您还没有使用过。由于您没有使用headers,因此风险要低得多,而且主要限于让某人轻松邮寄您。

如果您仍然担心mail()函数的安全性,最好的解决方案是使用像phpMailer这样的库。

老实说,无论何时有人想使用PHP的mail()函数,我的建议总是使用phpMailer或Swiftmailer。它甚至不仅仅是关于安全性;即使对于简单的情况,它们也可以使您的代码更易于阅读和维护。