如何阻止机器人使用 .submit() 绕过我的“必填”字段?

问题描述 投票:0回答:3

我有一个产生大量垃圾邮件的表单。我已完成所需的所有输入并附加了验证码。这没有任何影响。

我假设机器人正在使用

form.submit()
,因为出于某种原因,这绕过了我所有必填字段,并且也绕过了我的
onsubmit="check(e)"

我似乎无论如何都无法抓住这个事件

.submit()
。有谁知道如何赶上这个活动并确保它被取消。我希望提交表单的唯一方法是单击“提交”按钮。

$("#myForm").submit(function(event) {
    console.log("Handler for .submit() called.");

    if (CaptchaInput.value == "") {
        event.preventDefault();
    }
});

我的代码应该捕获

.submit()
调用并阻止表单提交。该功能永远不会被触发。

<form target="hidden_iframe" 
onsubmit="if (CaptchaInput.value == '') { why += '- Please Enter CAPTCHA Code.\n'; alert(why); return false; };return checkform(this)" id="myForm">
javascript form-submit preventdefault onsubmit
3个回答
4
投票

你不能。我可以在不使用浏览器或禁用 JavaScript 的情况下提交您的表单。任何人都可以直接向您的服务器发送 HTTP POST 请求,而无需执行您可能引入的任何客户端流程。

解决您问题的方法是同时在服务器上进行验证,并且不要依赖客户端验证来成功完成(或者实际上,甚至根本不依赖于客户端验证已运行)。

将客户端验证视为对用户的方便,他们会立即看到错误,而无需重新输入并重新提交整个表单。


0
投票
您应该跳过整个提交按钮并使用 JavaScript 来获取输入字段的值。据我所知,机器人还不够聪明,无法点击跨度。这就是我使用的,我对机器人提交没有任何问题。

<div id='contactUs'> <p><span id='user_message' class='btngover' onclick='go();'>Send</span></p> <p> <input id='email' placeholder='Contact email...' autofocus> <textarea id='subject' placeholder='Message content...'></textarea> </p> </div> function go() { const email = $('#email').val(); const subject = $('#subject').val(); if (email.trim() === '' || subject.trim() === '') { alert('All fields are required.'); return; } console.log(email + ' ' + subject);
}

您可以替换“console.log”,然后通过 Jquery AJAX POST 将其发送到您的 PHP。


-1
投票
您可以定义表单的

onsubmit

 属性,以运行验证您的输入的函数。仅当该函数返回 true 时,浏览器才会提交表单。

更新: 您只能在表单验证后才能定义操作。

所以,你的 html 看起来像这样:

<form id="myForm" onsubmit="return checkRecaptcha()" action="disabled"> <input type="text" name="myTextInput" value=""> <input type="submit" value="Submit"> </form>

定义该函数的 JavaScript 代码将如下所示:

function checkRecaptcha() { if (CaptchaInput.value == "") { document.getElementById("myForm").action="myCorrectUrl"; return true; } else { alert("not allowed"); return false; } }

然后捕获提交功能:

document.getElementById("myForm").submit = function () { console.log("catched"); return false; }
    
© www.soinside.com 2019 - 2024. All rights reserved.