如何防止伪造表格验证

时间:2015-04-23 20:42:40

标签: 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="regCheckbox" value="">
</form>

(当然,每个分散注意力的输入都会被删除。) 然后我有脚本,只有在选中复选框后才能提交表格。

button.on("click",function(){
if ($("#regCheckbox").is(":checked")) $("#zamowienie").submit();

不幸的是,我发现用户可以将按钮类型从“按钮”更改为“提交”,并且他将能够提交忽略我的提交保护脚本的表单。

还有一个问题。我不是专家,但我开始徘徊其他用户可以使用FireBug或开发工具。他能以这种方式进行任何攻击吗?

非常感谢任何答案或指导。

3 个答案:

答案 0 :(得分:5)

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

通过Jquery验证:

$("#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;
});

在后端验证:

例如,如果您在后端使用PHP,则必须检查是否选中了复选框,如下所示:
注意:您的复选框需要名称属性,请说mycheckbox

if (isset($_POST['mycheckbox'])) {
    //Process your form
}
else{
    //Checkbox was not checked, print an error message or something
}

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

答案 1 :(得分:1)

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

至于Firebug / Chrome Dev Tools问题,任何人都可以编辑FrontEnd中的所有内容。从CSS到JS。即使你缩小它!

答案 2 :(得分:1)

考虑用户可以做他想做的一切。他可以修改表单中的所有内容,甚至可以创建另一个定位相同网址的脚本,并创建一个脚本以提交1000次。

这就是你经常阅读的原因:

  

永远不要相信用户输入

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

总结一下:前端只是为了帮助“普通”用户与您的服务器进行通信,但在服务器端(后端),您必须期望每个输入都可能。