如何防止用户手动使用js .submit()函数提交表单,而不禁用javascript?



我有一个HTML5表单,所有使用HTML5表单验证,除了一个字段,它使用ajax在一个常规(不提交)按钮,标签为"提交"

使用ajax的,一旦该字段被验证,它就使用javascript的.submit()提交表单。在开发中,表单也有一个onsubmit属性,目前设置为return false;用于测试。

问题是,我所有的验证(除了reCaptcha),和形式的onsubmit被完全忽略时,机器人或人使用.submit()功能从浏览器的开发人员控制台。通过在开发控制台上使用.submit()函数提交一个空表单,对此进行了测试。

当使用我指定为submit的按钮提交时,表单按照预期完美地工作。我想做的是限制只提交到指定的按钮。

我在网上搜索了一遍又一遍,还是找不到解决这个问题的方法。

我尝试使用onsubmit属性,包括return false;,期望表单提交被停止,但事实并非如此。如果我能找出如何用指定的按钮以外的任何东西来阻止提交表单,那么我就可以解决问题的其余部分。禁用js并不是一个真正的选择,因为js只是站点运行所必需的。

下面的表单代码是一个非常精简的版本,它也排除了recaptcha元素和实际验证的元素(出于安全原因)。请原谅代码混乱。

<form method="post" enctype="multipart/form-data" action="example_action_page.php" onsubmit="return false;">
<table>
<tr>
<td>
Name:<span class="required">*</span>
</td>
<td id="name_field">
<input type="text" name="name" id="name" size="40" value="" class="inputWidth" required>
<a class="info" href="javascript:null;">
<img src="/images/tip_small.png" border="0">
<span class="infobox">
How should we address you?
</span>
</a>
</td>
</tr>
<tr>
<td>
Email:<span class="required">*</span>
</td>
<td id="email_field">
<input type="email" name="email" id="email" size="40" value="" class="inputWidth" required>
<a class="info" href="javascript:null;">
<img src="/images/tip_small.png" border="0">
<span class="infobox">
We need this to reply to you.
</span>
</a>
</td>
</tr>
<tr>
<td colspan="2">
<input name="contact_us" id="saveForm" type="button" value="Submit" onclick="return validation_function(element-to-validate);">
<input type="reset" name="reset" value="Reset">
</td>
</tr>
<tr>
</tr>
</table>
</form>

任何帮助都将是非常感激的。

我通过将按钮更改回正确的提交按钮并返回表单来解决这个问题,并显示错误。

<?php
if (!isset($_POST['formName']) and isset($_POST['subTest'])) {
echo "You are not allowed to submit this form, using javascript.";
}
?>
<form method="post" enctype="multipart/form-data" action="example_action_page.php" onsubmit="return false;">
<input type="hidden" id="subTest" name="subTest" value="submitted">
<table>
<tr>
<td>
Name:<span class="required">*</span>
</td>
<td id="name_field">
<input type="text" name="name" id="name" size="40" value="" class="inputWidth" required>
<a class="info" href="javascript:null;">
<img src="/images/tip_small.png" border="0">
<span class="infobox">
How should we address you?
</span>
</a>
</td>
</tr>
<tr>
<td>
Email:<span class="required">*</span>
</td>
<td id="email_field">
<input type="email" name="email" id="email" size="40" value="" class="inputWidth" required>
<a class="info" href="javascript:null;">
<img src="/images/tip_small.png" border="0">
<span class="infobox">
We need this to reply to you.
</span>
</a>
</td>
</tr>
<tr>
<td colspan="2">
<input name="FormName" id="saveForm" type="submit" value="Submit">
<input type="reset" name="reset" value="Reset">
</td>
</tr>
</table>
</form>

最新更新