PHP电子邮件表单拍摄空白电子邮件
我为一个网站准备了一个简单的PHP电子邮件表单,但它经常发送空白电子邮件。大部分的字段都是“必需的”,我使用CAPTCHA系统有一段时间了,但是空白的电子邮件不断出现。 HTML标记:PHP电子邮件表单拍摄空白电子邮件,php,forms,email,Php,Forms,Email,我为一个网站准备了一个简单的PHP电子邮件表单,但它经常发送空白电子邮件。大部分的字段都是“必需的”,我使用CAPTCHA系统有一段时间了,但是空白的电子邮件不断出现。 HTML标记: <form action="mail_send.php" method="post"> <input name="name" type="text" required="required" size="40" /> <input name="email" type="text"
<form action="mail_send.php" method="post">
<input name="name" type="text" required="required" size="40" />
<input name="email" type="text" required="required" size="40" />
<input name="company" type="text" size="40" />
<textarea name="message" cols="80" rows="7" required="required"></textarea>
<input type="submit" value="Submit" />
</form>
PHP:
$name=$\u POST['name'];
$email=$_POST['email'];
$company=$_POST['company'];
$message=$_POST['message'];
$formcontent=“发件人:\n$name\n\n公司:\n$COMPANY\n\n消息:\n$MESSAGE”;
$recipient=“电子邮件地址”;
$subject=“subject”;
$mailheader=“From:$email\r\n”;
邮件($recipient,$subject,$formcontent,$mailheader)或死亡(“Error!”);
echo“window.location='confirmation.php';
当我测试它时,一切都很好,我从表单接收电子邮件时一点问题都没有,但出于某种原因,我经常收到空白电子邮件(可能是来自机器人)
有什么想法吗
谢谢
<textarea name="message" cols="80" rows="7" required="required"></textarea>
应该是
<textarea name="message" cols="80" rows="7" required></textarea>
你在写XHTML还是HTML
还建议在服务器端进行验证。请参阅下面关于如何操作的答案 如果HTML表单和PHP位于同一个文件中,而您没有检查这些输入是否为空,则可能会发生这种情况。如果不在同一个文件中,不检查是否为空,仍然适用 你可能是机器人的受害者,或者某个经常访问你的网站只是为了吓唬你的小丑 或者表单方法的URL被某人或某物直接访问,这就是我觉得这里可能存在的问题,因为您的输入确实需要
- 检查您的访问日志
!empty()
针对所有输入
|
检查一个或多个是否为空
if( !empty($_POST['name']) || !empty($_POST['email']) ){
$name = $_POST['name'];
$email = $_POST['email'];
// process mail
}
您可以将其他的添加到中
或者为您的提交指定一个名称属性:
<input name="submit" type="submit" value="Submit" />
对于电子邮件输入,您还应使用过滤器:
isset()
旁注:
您可以在表单中添加一个复选框来检查它是否被选中,并使用条件语句来处理它
脚注: “大部分的字段都是“必需的”,我使用CAPTCHA系统有一段时间了,但是空白的电子邮件不断出现。 您的问题中没有任何验证码来支持这一点 N.B.: 所需属性仅在支持HTML5的浏览器中有效。因此,如果你的站点上的任何机器人或访问者使用的浏览器不支持HTML5,或是可以绕过HTML5的技术,那么这也可能是另一个(促成)因素 但出于某种原因,你会收到空白电子邮件,可能是机器人发来的 基本上回答了你的问题。机器人可以相当先进,可以破解某些验证码,也可以发布空白帖子请求。您应该检查post请求是否为空
牢不可破的验证码是你自己写的(在你的网站变得流行之前不要传播)或者。试一试(一旦您检查了值)您将希望在PHP上进行验证 基本上,您需要执行以下操作: 安全性
<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$website = test_input($_POST["website"]);
$comment = test_input($_POST["comment"]);
$gender = test_input($_POST["gender"]);
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
如果你想检查不止一件事,你可以让它变得更复杂一点
$fail_validation = FALSE;
if (empty($email)){
$fail_validation = TRUE;
}
if (empty($phone)){
$fail_validation = TRUE;
}
if ($fail_validation == FALSE){
//code to send mail goes here
}
请注意,这是非常基本的,并且您可能需要考虑查看一些额外的函数来确保PHP。我还建议使用蜜罐作为额外的安全层。
这是指一个HTML错误,php不关心这个问题。即使如此,这在XHTML1.1中也是有效的。我假设它是HTML5。我假设它是HTML4.01,因为我看不到任何HTML5标记的引用。HTML4.01和HTML5之间的区别所需属性在HTML5中是新的。好吧,你说得对。他是在写XHTML,而不是HTMLIs——PHP页面与HTML页面分开?如果是这样的话,一个机器人就可以直接发布到这个URL,而不需要通过你的表单。我建议也在服务器端进行验证。@user2547075 PHP确实是独立的。我建议在服务器端放置重复的验证。永远不要相信客户!:)@user2547075我该怎么做?我刚刚发布了一个答案。希望有帮助!正如其中一个答案注释所述,OP在html代码中显示的required属性是有效的XHTML。(只要它是在doctype中定义的)看到表单上的输入元素只会巩固这个参数,就像在任何其他html类型中一样,它应该用
结束/>
@Xorifelse OP应该发布完整的代码,然后向我们展示他们的文档声明是什么样子。到目前为止,OP还没有发表任何评论,所以这是任何人的游戏。@Fred ii-谢谢你的回复。我会落实你的建议。空白邮件几乎每天都会出现,如果它停止一两天,它可能会起作用。我尝试了谷歌的ReaPTCHA,但它并没有阻止发送空白邮件。我将尝试您的建议来检查空值。
<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = test_input($_POST["name"]);
$email = test_input($_POST["email"]);
$website = test_input($_POST["website"]);
$comment = test_input($_POST["comment"]);
$gender = test_input($_POST["gender"]);
}
function test_input($data) {
$data = trim($data);
$data = stripslashes($data);
$data = htmlspecialchars($data);
return $data;
}
?>
if (!empty($email)){
//your code to send email
}
$fail_validation = FALSE;
if (empty($email)){
$fail_validation = TRUE;
}
if (empty($phone)){
$fail_validation = TRUE;
}
if ($fail_validation == FALSE){
//code to send mail goes here
}