所以我有简单形式的页面。要提交此表单,我需要提交复选框(一些隐私政策等)。
我有这样的表格:
<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或开发工具。他能以这种方式进行任何攻击吗?
非常感谢任何答案或指导。
答案 0 :(得分:5)
用户可以通过许多其他方式更改表单,而不仅仅是更改按钮的type属性,最好是在服务器端进行检查,例如,您应该执行以下操作:
$("#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次。
这就是你经常阅读的原因:
永远不要相信用户输入
这意味着您必须检查服务器端的整个请求:检查使用的方法,检查您期望的字段是否设置了您期望的数据类型。
总结一下:前端只是为了帮助“普通”用户与您的服务器进行通信,但在服务器端(后端),您必须期望每个输入都可能。