我担心客户会出于安全原因在浏览器中关闭Javascript。我的Web应用程序在验证,AJAX等方面大量使用jQuery。
我的同事建议我也在服务器端进行验证。但是我在客户端也有一些显示/隐藏效果,例如,如果选中复选框,则会立即显示隐藏表。我知道设置autopostback = true
,我也可以得到相同的效果。
但是,没有冲突吗?
我不知道有多少客户端浏览器不支持Javascript。我的同事还说有人可以修改javascript以绕过验证。随着服务器端的会话加速,这种黑客攻击是否可行,这有意义吗?我的Web应用程序是.net 3.5项目。我只是不知道如何说服他。任何建议都非常感激!
答案 0 :(得分: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应用程序,有时渐进式增强不值得。例如,如果我正在为特定的内部使用制作基于Web的支付处理系统。我知道会有Firefox,我知道谁会使用它。如果有人试图在已知环境之外使用它,我不在乎它不起作用 - 它们不应该使用它。同样,如果我正在创建一个复杂的基于浏览器的图像编辑Web应用程序,那么应用程序的非JavaScript版本就不会有任何意义。
您必须评估您的最终产品是否可供最大的用户群访问,或者javascript带来的功能是否重要且具体到足以值得需要 javascript以便使用你的申请。在这些情况下,请查看noscript
代码:https://developer.mozilla.org/en/HTML/Element/noscript
答案 1 :(得分:1)
您当然应该使用服务器端验证。如果你知道自己在做什么,很容易绕过客户端验证。
至于处理禁用JavaScript的用户,你可以做一些事情,例如在你的所有内容上方都有一个灯箱样式窗口,并带有“请启用JavaScript”等消息,然后在页面加载时用JavaScript删除灯箱
但是,现在绝大多数用户都启用了JavaScript。
答案 2 :(得分:0)
这就是为什么你应该总是在服务器上执行验证的原因。如果客户端禁用了javascript,则可以保证无论他输入的内容在处理之前都会得到正确验证。
答案 3 :(得分:0)
始终,始终在服务器端验证。客户端验证仅供用户使用。
但是,关于禁用的JavaScript。如果它对您很重要,那么请使用纯HTML / CSS编写。在绝大多数Web应用程序中,JavaScript是应用程序逻辑的标准部分。您不需要考虑禁用JavaScript的用户...它根本不是一个选项。
答案 4 :(得分:0)
由于您提到的问题,您应该始终在服务器上进行验证; javascript已关闭或修改。
请注意,许多自动回发功能也使用Javascript,因此大部分内容都无效。您必须决定如何继续前进。可能只是展示所有内容,并让服务器过滤掉不适合的选项。
您可以使用<noscript>
元素通知用户相关表单不是针对非JavaScript浏览器设计的,并强烈建议他们启用它。您甚至可以默认隐藏整个表单,只显示在Ready()
函数中,因此它只适用于javascript。 (请记住,您仍在验证服务器端的所有内容以解决恶意修改)
答案 5 :(得分:0)
我的同事还说有人可以修改javascript以绕过验证。随着服务器端的会话加速,这种黑客攻击是否可行,这有意义吗?
您对会话/身份验证的验证感到困惑。一个与另一个无关。是的,修改(或完全禁用)JavaScript可以绕过客户端验证。您应该考虑客户端验证,以帮助用户。它不应该依赖于您的业务逻辑,因为它可以被篡改。
因此,服务器端验证也是必须的。
如果您真的非常想确保客户端利用客户端验证的细节,请使用'noscript'块让他们知道“嘿,JavaScript被禁用。为了改善用户体验,请重新-enable JavaScript“