如何使电子邮件提交表单对机器人隐藏 "form action=bla-bla.php" 部分?

How to make email submit form hide "form action=bla-bla.php" part from bots?

我每天都有 bot/fake 封电子邮件提交到我的电子邮件列表,即使它们没有显示在我的电子邮件提交表单所在的登录页面 google 分析统计信息中。我被告知机器人可能会绕过表单,将 POST 请求直接发送到提交表单的 URL。

<form action="http://example.com/something.php">

他们直接去 something.php 并提交。

我被告知我可以制作一个 javascript 来提交表单 onclick(这样表单就不会显示操作内容)或者通过对 PHP 脚本进行一些修改正在处理表单。

我不知道该怎么做。你能帮帮我吗?

原始骨架形式代码:

<form action="https://app.getresponse.com/add_subscriber.html" accept-charset="utf-8" method="post" class="w3-container w3-card-4 w3-light-grey w3-text-blue w3-margin">

  <input class="w3-input w3-border" name="email" input type="email" required placeholder="Enter Your Email Here">
  <input type="hidden" name="campaign_token" value="fhdfh" />
  <input type="hidden" name="thankyou_url" value="https://example.com/confirm-email.php"/>
  <input type="hidden" name="start_day" value="0" />
</div>

<div style="margin-top:25px;"><button type="submit" class="w3-button w3-block w3-section w3-deep-orange w3-ripple" style="padding-top:15px;padding-bottom:15px;">Send me the eBook on Email</button></div>

</form>

防止这种情况的最佳方法是实施某种验证,例如 reCAPTCHA:https://developers.google.com/recaptcha/

第一步非常简单,就是在 JavaScript 片段中设置操作。这些机器人中的大多数不会执行 javascript 并且会尝试 post 到表单所在的页面(可能不是未来的证据,但自 2005 年以来它一直在为我工作)

在下面的代码中,我在表单标签中添加了一个 id,删除了 action 属性并添加了一点 javascript 以在页面加载后进行设置。

<form id="myform" accept-charset="utf-8" method="post" class="w3-container w3-card-4 w3-light-grey w3-text-blue w3-margin">

  <input class="w3-input w3-border" name="email" input type="email" required placeholder="Enter Your Email Here">
  <input type="hidden" name="campaign_token" value="fhdfh" />
  <input type="hidden" name="thankyou_url" value="https://example.com/confirm-email.php" />
  <input type="hidden" name="start_day" value="0" />

  <div style="margin-top:25px;"><button type="submit" class="w3-button w3-block w3-section w3-deep-orange w3-ripple" style="padding-top:15px;padding-bottom:15px;">Send me the eBook on Email</button></div>
</form>

<script>
  document.getElementById('myform').setAttribute('action', 'https://app.getresponse.com/add_subscriber.html');
</script>