javascript是否可靠,可以防止前端的操作,例如表单提交?

时间:2009-12-29 14:43:35

标签: asp.net javascript web-services forms

我有一个我需要调用的web服务,其结果决定了是否允许用户提交表单。

由于此调用来自javascript,而不是来自代码,因此它不可靠吗?有没有办法用户可以绕过检查 - 通过使用firebug和启用提交按钮,以某种方式使方法给出不同于Web服务实际返回的结果,任何其他方式可以绕过它?

基本上有没有办法从javascript调用web服务并让它的结果决定是否可以提交表单,实际上阻止用户提交表单? - 他们是否有萤火虫等......

8 个答案:

答案 0 :(得分:10)

不,不可能。

仅举几个可能的原因:

  • 如果禁用了javascript怎么办?
  • 如果用户提交原始POST(例如,使用libcurl),该怎么办?
  • 如果用户使用的浏览器以某种方式解释javascript,与您的期望(想想,便携式设备)不同,该怎么办?

Javascript验证仅供用户使用 ,并且永远不应 用作提供安全性的方法。

答案 1 :(得分:1)

您永远不能阻止用户发出模仿提交表单的HTTP请求。虽然通过Javascript禁用表单会阻止提交95%的启用了Javascript 并且不想绕过您的访问控制的用户,但任何了解HTTP的人都可以电话,你是正确的,表明任何拥有Firebug的人都可以在几秒钟内完成。

答案 2 :(得分:0)

Javascript对于防止任何事情是不可靠的。它不应该被看作是一个安全墙,因为它很容易被萤火虫,例如电子邮件和许多其他浏览器玩具拆解。

即使您可以阻止他们在您的网页上提交您的表单,也不会阻止他们在自己的页面上创建一个全新的表单,并将其指向您表单的操作。因此,他们将自己从“安全”环境中移除,而不是选择自己玩。

答案 3 :(得分:0)

你的怀疑是正确的;用户可以轻松绕过任何可能的Javascript验证。

您需要使用服务器端代码。

答案 4 :(得分:0)

不,它不可靠。尝试在浏览器中禁用Javascript,亲自了解可以轻松解决它。

答案 5 :(得分:0)

用户只需在浏览器中停用javascript,或使用NoScript之类的内容。您可以做的最好的事情是尝试在Ajax请求的返回中设置表单操作本身,这样加载的表单将不会提交(除了自身)。这可能会阻止临时用户,但不会对一个稍微坚定(或者只是无聊和技术娴熟)的用户造成障碍。无论你做什么,都需要检查服务器端。

答案 6 :(得分:0)

一般来说,没有。您无需通过Javascript即可使表单难以提交。使提交按钮不是实际的提交按钮(<input type="submit">),而是在其<input type="button">处理程序中提交表单的按钮(onClick)。

答案 7 :(得分:0)

正如其他人所说,不,你不能这样做。唯一真正的解决方案是让Web服务返回Javascript在隐藏表单输入中插入的动态值。然后,无论服务器端代码处理如何,如果该值不存在,表单提交应该拒绝该请求。