2011-06-15 128 views
1

我关心的是为安全起见,在浏览器中关闭Javascript的客户端。我的web应用程序严重使用jQuery验证,AJAX等。如何处理客户端关闭Javascript?

我的同事建议我也在服务器端进行验证。但是我在客户端也有一些显示/隐藏效果,例如,如果复选框被选中,将立即显示一个隐藏表。我知道设置autopostback = true,我也可以得到同样的效果。 但是,没有冲突吗?

我不知道有多少客户端浏览器不支持Javascript。我的同事也说有人可以修改javascript来绕过验证。随着服务器端的会话云化,这种破解是否可能,这是否有意义?我的web应用程序是.net 3.5项目。我只是不知道如何说服他。任何建议是高度赞赏!

+2

服务器端验证**总是**比在客户端进行验证更安全。任何人都可以关闭Javascript,输入恶意数据,然后将其提交给服务器而不检查它。在处理用户输入时总是假设最坏的情况。 – Wylie 2011-06-15 20:27:06

+1

黑客不会使用您的表单向您的服务器提交数据。他们会使用他们自己的方法。服务器端验证是100%必须的。 – 2011-06-15 20:28:18

回答

2

在处理发布的表单时,您必须始终在服务器上执行验证。考虑一下 - 我可以制作一个PHP脚本和POST数据到你的服务器上,而不必使用你的表单!你永远不能依靠JavaScript验证。

Javascript验证就像蛋糕上的糖霜。它可以使您的表单更易于理解并且更易于理解。但它不仅仅是蛋糕本身。花一些时间来阅读“渐进增强”的概念:

http://www.alistapart.com/articles/understandingprogressiveenhancement

http://coding.smashingmagazine.com/2009/04/22/progressive-enhancement-what-it-is-and-how-to-use-it/

对于JavaScript的沉重的Web应用程序,虽然有时渐进增强是不值得的。例如,如果我正在为特定的内部使用制作基于网络的支付处理系统。我知道会有Firefox,我知道谁会使用它。如果有人试图在已知环境之外使用它,我不在乎它不起作用 - 它们不应该被使用。同样,如果我正在创建一个复杂的基于浏览器的图像编辑Web应用程序,那么在该应用程序的非JavaScript版本中就没有任何意义。

您必须评估您的最终产品是否旨在被大部分用户访问,或者如果javascript带来的功能足够重要且具体,那么需要使用 javascript才能使用您的应用程序。在这些情况下,请查看noscript标记:https://developer.mozilla.org/en/HTML/Element/noscript

0

这就是为什么您应该始终在服务器上执行验证的原因。如果客户端禁用JavaScript,那么您将保证在输入任何内容之前都会对其进行正确验证。

0

始终,始终在服务器端验证。客户端验证仅供用户使用。

但是,关于禁用的JavaScript。如果它对你很重要,那就用纯HTML/CSS编写。在绝大多数Web应用程序中,JavaScript是应用程序逻辑的标准部分。您无需考虑禁用JavaScript的用户。它根本不是一个选项。

1

你应该一定使用服务器端验证。如果你知道你在做什么,那么很容易绕过客户端验证。

对于处理禁用JavaScript的用户,您可以在您的所有内容上方执行类似于具有lightbox风格窗口的操作,并显示诸如“请启用JavaScript”之类的消息,然后在页面中使用JavaScript删除Lightbox负载。

但是,现在绝大多数用户都启用了JavaScript。

0

由于您提到的问题,您应该始终在服务器上进行验证;关闭或修改了javascript。

请注意,许多自动回发功能也使用Javascript,但这样做也无济于事。你必须决定如何在那里继续。可能只是提供一切,并让服务器筛选出不适合他们选择的事情。

您可能会使用<noscript>元素来通知用户相关表单不适用于非JavaScript浏览器,并强烈建议他们启用它。你甚至可以默认隐藏整个表单,只显示在Ready()函数中,所以它基本上只适用于javascript。 (请记住,您仍然在验证服务器端的所有内容以解决恶意修改)

0

我的同事还说有人可以修改javascript以绕过验证。随着服务器端的会话云化,这种破解是否可能,这是否有意义?

您正在验证与会话/验证混淆。一个与另一个无关。是的,修改(或完全禁用)JavaScript会绕过客户端验证。您应该考虑客户端验证帮助用户。它不应该依赖于您的业务逻辑,因为它可能会被篡改。

因此,服务器端验证也是必须的。

如果您确实想确保客户端利用您的客户端验证的优势,请使用'noscript'代码块让他们知道“嘿,JavaScript已禁用。为了改善用户体验,请重新启用JavaScript“