到目前为止,我一直在使用下面的表单验证。它需要字段,电子邮件验证和垃圾邮件蜜罐。但是,我的一个客户端正在获取空白表单结果,而实际上根本不应提交表单。所以也许我没有看到明显的。我认为这是非常简单的代码。任何人都可以快速浏览一下,如果我错过了什么可以告诉我吗?
另一方面,垃圾邮件机器人比蜜罐更智能吗?
这是JS:
<script>
function verify() {
var themessage = "You are required to complete the following fields: ";
var x=document.form.email.value
var atpos=x.indexOf("@");
var dotpos=x.lastIndexOf(".");
if (document.form.address.value!="") {
themessage = "You are not human! No form for you!";
}
if (document.form.first_name.value=="") {
themessage = themessage + " - First Name";
}
if (document.form.last_name.value=="") {
themessage = themessage + " - Last Name";
}
if (document.form.email.value=="") {
themessage = themessage + " - E-mail";
}
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length) {
themessage = "You need to enter a valid email address";
}
//alert if fields are empty and cancel form submit
if (themessage == "You are required to complete the following fields: ") {
document.form.submit();
}
else {
alert(themessage);
return false;
}
}
</script>
和HTML:
<form name="form" method="post" action="output.php">
<div id="input">
<div id="field">First Name:</div>
<input name="first_name" type="text" id="first_name">
</div>
<div id="input">
<div id="field">Last Name:</div>
<input name="last_name" type="text" id="last_name">
</div>
<div id="input">
<div id="field">Email:</div>
<input name="email" type="text" id="email">
</div>
<div class="input address"><!-- This is the Honeypot -->
<div id="field">Address:</div>
<input name="address" type="text" id="address">
</div>
<div id="input">
<div id="field">Phone:</div>
<input name="phone" type="text" id="phone">
</div>
<div id="input">
<div id="field3">Comments:</div>
<textarea name="comments" id="comments"></textarea>
</div>
<input type="button" value="Submit" onclick="verify();">
</form>
答案 0 :(得分:0)
将空白放入字段(除了电子邮件)将产生看似空的表单结果
答案 1 :(得分:0)
您可能只使用表单数据的客户端验证,这很糟糕。
Bots不运行JavaScript,因此他们会忽略您的verify
函数,只需发送纯HTML格式的表单。
通常,出于安全原因以及用户可能在其浏览器设置中禁用了JavaScript,您应始终为服务器端验证提供更高的优先级。
在JavaScript中进行这些验证应该是一个可选功能,以提高可用性,但它绝不应该实现安全功能(如“蜜罐”)。