我在这里问这个问题是因为我对 CGI 规范的理解是身份验证应该由 apache 而不是脚本来处理:https://www.rfc-editor.org/rfc/rfc3875#section-3。
我制作了一个网页来宣传某个生日聚会。这是一个由 ubuntu server 12.04 上的 apache2 提供的简单 html 页面。页面上有一个指向 cgi 脚本 Python 的链接,该脚本要求请求者提交文本值,这些文本值将被格式化并通过电子邮件转发给生日男孩。有什么简单的方法可以验证填写表格的人是谁,这样我就可以避免生日男孩收到垃圾邮件。使用标准 CGI 是因为我不希望并发请求过载。
答案1
我发现最简单、最好的方法是在页面上放置一个输入表单,该表单将被 javascript 或 CSS 隐藏。例如:
<link href="/styles.css" rel="stylesheet" type="text/css" media="all" />
<form action="/birthday.php" method="post">
<p>Email: <input type="text" name="email" /></p>
<p>Name: <input type="text" name="name" /></p>
<p>Phone: <input type="text" name="phone" /></p>
</form>
在本例中,我们将使用它phone
作为秘密人工验证输入。在您的styles.css中,您应该有:
input[name="phone"] {
display: none;
}
在这种情况下,“电话”输入类型将被每个真实用户的浏览器隐藏,并且不会随表单提交。(大多数)垃圾邮件机器人不会加载和解析外部 CSS 文件,因此您可以在脚本中检查“电话”输入是否存在:
PHP代码:
if (isset($_POST['phone'])) {
// this is spam, but don't let them know
echo 'thanks!';
exit;
}
99% 的机会你不会收到垃圾邮件。如果确实收到了,你可以更进一步,使用 javascript 禁用表单字段:
$(function() {
$('input[name="phone"]').hide();
});
这使得垃圾邮件发送者有责任加载和解析你的 CSS(或 javascript)文件,而且非常容易实现。