2010-08-21 74 views
1

在php上创建了一个小的联系表单,它获得了$_POST变量和邮件给我。PHP安全邮件变量

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

小块代码:

$subject = trim($_POST['subject']); 
$comment = trim($_POST['comment']); 
mail($email, $subject, $comment, $headers); 

$email是我的邮件地址,$headers是平常。

没有过滤主题和评论。 它可能是我的网站潜在的安全漏洞吗?

我的邮件放在gmail.com上。 当我在浏览器中打开Gmail接口时,我的网站的未过滤邮件是否会伤害到我?

我应该如何过滤所有变量?也许我希望echo其中一些在我的网站发送电子邮件后。 (比如'Thanks,%name%!')

回答

1

不,这并不危险。 Gmail不信任您收到的电子邮件,否则每个垃圾邮件发送者都可能会对您造成危害。

但是,至少检查一下变量是否存在以及它们的长度是否超过最大值是一种很好的做法。

编辑旧版本的PHP可能会受到电子邮件注入攻击的攻击,如here所述。它不会危害您的网站,您的电子邮件客户端应该能够安全地处理恶意电子邮件,但可能会将您变成垃圾邮件中继。

新版本不会出现此漏洞,因为所有控制字符(低于0x20)都是sanitized。你可以像这样做相同的卫生设施:

$subject = filter_input(INPUT_POST, "subject", FILTER_UNSAFE_RAW, 
    FILTER_FLAG_STRIP_LOW); 
if ($subject === false) { /* subject not given/not scalar; handle it */ } 
+0

对于这两个问题都适用? – James 2010-08-21 19:31:38

+0

@工作是的,两者兼而有之。 – Artefacto 2010-08-21 19:32:01

+0

邮件字段的最大长度是多少? – James 2010-08-21 19:36:02

1

是的,这是危险的,易受攻击称为邮件注入。
虽然它不能伤害你的网站,但可以被垃圾邮件发送者使用。

$subject = "Site feedback"; 
$comment = trim($_POST['subject'])."\n\n".trim($_POST['comment']); 
mail($email, $subject, $comment); 

这一个将是安全的。

+0

为什么'trim'在这里帮助你? – Artefacto 2010-08-21 19:42:03

+0

@艺术装饰不帮助注射大声笑 – 2010-08-21 19:45:39

+0

对不起,-1。这根本不会帮助你。 – Artefacto 2010-08-21 20:01:49

1

可能你可以检查http://swiftmailer.org/一个php邮件组件库,以便比较你的解决方案。 Swiftmailer是symfony-project.org等框架的邮件解决方案。

纯文本不是一个网站的问题,附件是,但评论和主题不会在您的服务器中产生任何问题。关于Gmail,它有自己的电子邮件验证,因此,病毒或类似的电子邮件将很难通过他们的分析。 rgds。