Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何防止伪造表单验证_Javascript_Jquery_Html_Forms - Fatal编程技术网

Javascript 如何防止伪造表单验证

Javascript 如何防止伪造表单验证,javascript,jquery,html,forms,Javascript,Jquery,Html,Forms,所以我有一个简单形式的页面。要提交此表格,我需要有人提交复选框(一些隐私政策等) 我有这样的表格: <form role="form" class="form" id="zamowienie" action="send_order.php" method="post"> <button type="button" id="wyslijZamowienie">SEND</button> <input type="checkbox" id="regCheck

所以我有一个简单形式的页面。要提交此表格,我需要有人提交复选框(一些隐私政策等)

我有这样的表格:

<form role="form" class="form" id="zamowienie" action="send_order.php" method="post">
<button type="button" id="wyslijZamowienie">SEND</button>
<input type="checkbox" id="regCheckbox" value="">
</form>
不幸的是,我发现用户可以在本地将按钮类型从“button”更改为“submit”,并且可以忽略我的提交保护脚本来提交表单

和补充问题。我不是一个专家,但我开始思考用户还可以用FireBug或开发工具做些什么。他能用这种方式进行攻击吗


非常感谢您的回答或指导。

这就是您总是在服务器上验证的原因之一。 在前端进行验证没有问题,但您需要服务器进行双重检查,以确保所有数据都符合预期


至于Firebug/Chrome开发工具问题,任何人都可以从前端编辑所有内容。从CSS到JS。即使你缩小它

考虑用户可以做任何他想做的事情。他可以修改表单中的所有内容,甚至可以针对同一url创建另一个表单,并创建脚本提交1000次

这就是为什么你经常阅读:

永远不要相信用户的输入

这意味着您必须在服务器端检查整个请求:检查所使用的方法,检查预期字段是否设置了预期的数据类型


总而言之:前端只是用来帮助“普通”用户与服务器进行通信,但在服务器端(后端),您必须期待所有可能的输入。

用户可以通过许多其他方式更改表单,而不仅仅是更改按钮的类型属性,最好的方法是在服务器端检查它,例如,您应该执行以下操作:

<form role="form" class="form" id="zamowienie" action="send_order.php" method="post">
<button type="button" id="wyslijZamowienie">SEND</button>
<input type="checkbox" id="regCheckbox" value="">
</form>
通过Jquery验证: 在后端验证: 例如,如果在后端使用
PHP
,则必须检查复选框是否已选中,如下所示:
注意:您的复选框需要一个name属性,比如说
mycheckbox


始终在后端验证您的代码,Javascript验证只是可用性和用户体验的一个加号。

祝贺您!您已经了解了为什么必须在服务器上进行验证。JavaScript验证只是一个UI奖励。在客户端上,您无法阻止这一点。您必须在服务器上进行验证以确保完全安全。
用户使用FireBug或开发工具还可以做些什么
他们可以使用JavaScript做任何事情。正如@Juhana所说,这就是为什么您也必须在服务器上验证请求数据的原因。可以肯定的是,客户端JavaScript验证应该是一种方便,可以节省每个人因服务器端验证失败而占用的时间和带宽。换句话说:首先实现服务器端验证,然后实现客户端验证。是的!确切地在ChromeDevTools中,单击一下就可以呈现新的样式表规则。这里的任何人都可以在JavaScript控制台上用三行代码更改按钮的类型。简单。而且,这也是recaptcha想要得到你答案的地方。老实说,我不想在我的表单中添加任何类型的验证码来减少提交失败的次数(因为这是一个订购产品的表单)。我会尝试用一些PHP和API来保护自己不受1000次提交的影响,但我不知道如何做到这一点。我还计划验证是否有任何其他字段被添加到表单中并提交-为此,我想我有一个想法。我将产生一些代码,并问另一个问题,如果这是保护自己不受不必要的活动。谢谢你的回答。我不一定完全理解为什么要用jquery进行验证,但我会尝试找出:)我知道在发现数据有问题后应该重新打开表单页面。或者改用Ajax来防止页面刷新。
$("#zamowienie").submit(function(e) {
    if(!$('input[type=checkbox]#regCheckbox:checked').length) {
        //stop the form from submitting
        return false;
    }
    //Continue and submit the form
    return true;
});
if (isset($_POST['mycheckbox'])) {
    //Process your form
}
else{
    //Checkbox was not checked, print an error message or something
}