为什么我能够在活动站点上“选中”“禁用”复选框,并且数据已成功上传到服务器
Why were I able to "check" the "disabled" checkbox on the live site and the data was successfully uploaded to the server
所以我刚刚访问了一个站点,其中有"禁用"复选框
<input type="checkbox" name="name" checked="checked" disabled="disabled">
它无法通过鼠标检查,所以我决定通过jQuery取消选中它。打开控制台并写道:
$('input[name="name"]').attr('checked', false);
它被取消了。我想,好吧,也许它只是为了我未选中,但服务器仍然会从中获取数据,就好像它被选中一样。
所以我上传了我的表单,令我惊讶的是,服务器的行为就像未选中复选框一样。
为什么?
它被取消了。我想,好吧,也许它只是为了我未选中,但服务器仍然会从中获取数据,就好像它被选中一样。
仅当表单控件成功时,表单控件中的数据才会包含在提交中:
- 禁用的窗体控件将不会是成功的控件
- 未选中的复选框将不是成功的控件
您刚刚将其从一个不会提交数据的状态更改为另一个不会提交数据的州。
尝试检查通过浏览器的开发人员控制台发送到服务器的确切请求,您将看到实际发送到服务器的所有参数。由于您说复选框被禁用,因此它的值根本不会发送到服务器(无论是否选中)。所以我假设它只是 UI 的一部分,它的值不在服务器上处理。
值得记住的是,浏览器呈现的表单上的字段,以及提交它们时在请求中发送到服务器的值,基本上仅通过约定进行连接。也就是说,浏览器应该做什么有严格的标准,但是一旦服务器发送了一些HTML,浏览器理论上就可以用它做它喜欢的事情。事实上,你可以直接查看HTML,并手动创建一个HTTP请求(因为它是基于文本的协议),它提交了你想要的任何数据。
这对于开发人员来说很重要,因为这意味着从用户那里收到的所有数据都是不受信任的 - 无论您如何布局UI,要求浏览器隐藏哪些字段,将只读等,用户都可以向您发送您喜欢的任何数据,并且在服务器收到后由您来检测。
因此,虽然在这种情况下您错了,但总的来说,您可以使用jQuery或浏览器的F12调试工具来操作表单上的字段。在这种情况下,它没有区别,因为即使未禁用未选中的复选框也不会发送到服务器(这种设计有时对于服务器端代码的作者来说相当烦人)。但是在其他情况下,您可以影响发送的内容:
- 删除复选框的
disabled
属性,并设置checked
属性(以便将值发送到服务器) - 更改控件的状态,该控件
readonly
,而不是disabled
(因为它的值将始终被发送) - 更改隐藏字段的
value
属性,或将其设置为可见并在其中键入(例如,尝试jQuery('input[type=hidden]').attr('type', 'text');
)
将 select
下拉列表换成具有相同name
属性的自由文本input
,以选择不在列表中的值- 一次取消设置单选框组中的所有项目(人们在实际 UI 中实际执行的操作,作为"以上都不是"/"尚未选择"的丑陋笨拙)
- 或者甚至只查看页面上所有控件的名称,并使用具有所有这些名称的文本字段创建自己的窗体,并使用不同的值
所以不,在这种情况下你没有破解任何东西,但是是的,基本的想法是合理的。
- 如何从servlet获取数据到ajax成功
- ajax请求成功,但可以'我看不到我的数据
- Ajax正确发布表单,但不会返回成功数据
- ajax成功地将数组中的数据放入表中各自的输入中
- 使用JSON数据检索AJAX外部成功函数
- 使 ajax 请求和成功数据显示在 id <选择>选择>部分中
- 按钮在第一次成功的 ajax 数据加载后不起作用
- 为什么不允许在jquery数据表服务器端处理ajax中使用成功
- Ajax响应成功,但无法使用数据(未捕获语法错误:意外标识符)
- 如何在ajax成功调用中读取解析后的json数据
- ajax调用成功,但未返回任何数据
- 编辑当前表单向导以成功发布数据
- 当调用成功时,如何从angular 2中的http调用返回数据
- 在 require.js 中返回成功数据,并带有回调
- 成功:功能(数据);不使用命名函数
- jQuery$.ajax方法.成功:使用响应数据的函数
- 如何访问作为参数发送到jquerypost的成功回调中的数据值
- Ajax响应给出数据成功错误
- jQuery/json/Ajax -如何从数据成功中找到第一响应
- 美元.Post数据成功返回数据不成功,但成功