【问题标题】:How to deal with client turn off Javascript?如何处理客户端关闭Javascript?
【发布时间】:2011-06-15 20:24:04
【问题描述】:

我担心出于安全原因在浏览器中关闭 Javascript 的客户。我的 Web 应用程序在验证、AJAX 等方面大量使用 jQuery。

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

我不知道有多少客户端浏览器不支持 Javascript。我的同事还说有人可以修改 javascript 以绕过验证。通过服务器端的会话验证,这种破解是否可能,这有意义吗?我的网络应用程序是 .net 3.5 项目。我只是不知道如何说服他。任何建议都非常感谢!

【问题讨论】:

  • 服务器端验证总是比在客户端验证更安全。任何人都可以关闭 Javascript,输入恶意数据,然后将其提交到服务器而不进行检查。在处理用户输入时总是假设最坏的情况。
  • 黑客不会使用您的表单向您的服务器提交数据。他们会使用自己的方法。服务器端验证是 100% 必须的。

标签: javascript .net asp.net client-server


【解决方案1】:

在处理已发布的表单时,您必须始终在服务器上执行验证。考虑一下 - 我可以在 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

【讨论】:

    【解决方案2】:

    您当然应该始终使用服务器端验证。如果您知道自己在做什么,就很容易绕过客户端验证。

    对于禁用 JavaScript 的用户,您可以执行以下操作,例如在所有内容上方设置一个灯箱样式窗口,并显示“请启用 JavaScript”之类的消息,然后在页面加载时删除带有 JavaScript 的灯箱.

    然而,现在绝大多数用户都启用了 JavaScript。

    【讨论】:

      【解决方案3】:

      这就是为什么您应该始终在服务器上执行验证的原因。如果客户端禁用了 javascript,您将保证他输入的任何内容在处理之前都会得到正确验证。

      【讨论】:

        【解决方案4】:

        始终,始终在服务器端进行验证。客户端验证只是为了方便用户。

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

        【讨论】:

          【解决方案5】:

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

          请注意,许多自动回发功能也使用 Javascript,其中大部分功能也不起作用。您必须决定如何继续进行。可能只是呈现所有内容,并让服务器过滤掉不适合他们选择的内容。

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

          【讨论】:

            【解决方案6】:

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

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

            所以,服务器端验证也是必须的。

            如果您真的-真的想确保客户端利用您的客户端验证的优点,请使用“noscript”块让他们知道“嘿,JavaScript 已禁用。为了改善用户体验,请重新- 启用 JavaScript"

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2012-10-05
              • 2013-05-13
              • 2017-05-18
              • 2014-04-15
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2012-03-02
              相关资源
              最近更新 更多