【发布时间】:2014-02-01 21:56:13
【问题描述】:
我正在处理一些表单,并希望获得有关如何正确使表单免受黑客、垃圾邮件等攻击的建议。此外,我想知道如何在电子邮件中正确发送此表单数据(附件将也被发送,所以我使用 enctype 作为 multiform/form-data)。
为简单起见,假设我的表单中只有 1 个字段。
<form method="post" enctype="multipart/form-data">
Address: <input type="text" name="user-address" value="<?php echo $_POST['user-address']; ?>" />
<input type="submit" value="Submit" />
</form>
现在,为了确保用户输入安全,我需要执行哪些步骤?例如,我知道我可以做 trim() 并检查“用户地址”(在 $_POST 中)是否为空。但我还应该做什么?我一直在看到关于 htmlentities() 和 htmlspecialchars() 的东西,这让我很困惑。我应该使用那些吗? stripslashes() 呢?
确保输入安全后,我想发送一封电子邮件(使用 PHPMailer),说明用户在正文中输入的内容。我注意到的是,如果用户输入单引号或双引号,例如 " ;显示在电子邮件正文中,而不是实际字符中。这是因为电子邮件是以纯文本形式发送的吗?我希望它以纯文本形式发送,因为这就是我拥有的表单字段所需要的全部内容。所以我在 $_POST['user-address'] 上使用了 html_entity_decode(..., ENT_QUOTES) 并且使它工作。但是,我不确定这是否是正确的方法,或者这是否会带来某种安全风险。
$msg = "Address: " . html_entity_decode($_POST['user-address'], ENT_QUOTES);
//send e-mail with attachment and $msg as body
要点:我怎样才能确保上面的简单表格是安全的?以及如何处理电子邮件中显示的单引号和双引号 HTML 实体(假设我要发送纯文本电子邮件)?
感谢您的帮助!
【问题讨论】:
标签: php html forms security email