【问题标题】:Client side validation vulnerabilities in GWTGWT 中的客户端验证漏洞
【发布时间】:2011-07-07 22:54:27
【问题描述】:

我正在使用 GWT 构建一个 Web 应用程序,并使用一个简单的 java 类在客户端执行文本框和其他字段的验证。我不确定用户可以在运行该代码期间绕过这些验证。请告诉我在表单中进行验证的最佳安全方式。

【问题讨论】:

    标签: validation gwt


    【解决方案1】:

    通常,您需要在客户端和服务器上同时验证:在客户端上以立即向用户反馈(方便,可选),在服务器上以确保安全(必须!)。

    与在客户端使用 jQuery 或类似的应用程序以及在服务器端使用不同语言的应用程序相比,使用 GWT 获得的优势是,您可以重用相同的验证代码进行客户端和服务器验证.

    【讨论】:

    • +1 还需要注意的是,做客户端验证的主要原因是为了减少对服务器的不必要调用。
    • 我有一个疑问,当方法被调用到服务器时,调用是通过 java 代码完成的,并且 java 代码在 GWT 中被转换为 javascript,那么如果 javascriptcode 被修改并且调用服务器进行验证的语句被删除。为了安全起见,在这种情况下应该做些什么。
    • @Amandeep:用户只能修改客户端代码。更好:想象一下,用户可以发送他们想要的绝对任何 HTTP 请求(尝试例如 Firefox 插件Poster - 他们甚至不必使用您的 GWT 应用程序来与您的服务器交互!这就是为什么所有安全检查也必须在服务器端执行的原因。
    • @Chris:请告诉我,我正在执行服务器端验证,从 GWT 应用程序到服务器的调用流程是什么。
    • @Amandeep:我认为,最好单独打开一个关于 GWT 验证程序流程的问题,(您可以提供更多详细信息,并获得更具体的答案)。
    【解决方案2】:

    浏览器中的 Javascript 可能会被黑客入侵/绕过,因此没有安全的方法可以做到这一点。您不应依赖 javascript 来执行任何与安全相关的功能。

    您必须在服务器上进行安全检查,以确保您的应用安全。

    【讨论】:

      【解决方案3】:

      这是一篇关于我对客户端与服务器验证的看法的简短博文:

      http://ashtoncthomas.blogspot.com/2011/03/gwt-validation-on-client-server.html

      您可以在几个方面进行验证以及一些平衡,例如在客户端和服务器之间共享代码。

      您是否在创建 DTO 之前或之后进行验证(如果您在之后进行验证,那么您可以共享一些代码,但您不能信任输入)

      我构建了一个自定义验证框架,可以轻松地在客户端和服务器上捆绑验证,但每种情况都不同,因此我建议找到适合您的大多数项目或至少适合您当前项目的东西。

      【讨论】:

        【解决方案4】:

        自 2006 年起就承诺进行适当的客户端验证! http://code.google.com/p/google-web-toolkit/issues/detail?id=343 我没有屏住呼吸。

        我已经从脆弱的自制客户端验证转移到往返验证,在这种验证中,您提交一个持久请求,实体处于无效状态。如果您有一个运行服务器端的验证器,RequestFactory 将在 Receiver.onViolation() 中向您发送一个 Set。

        这对我来说意味着更少的代码,代价是客户端接收验证结果的延迟很小。它仍然比纯 HTML 表单快得多。

        看看验证实体: http://code.google.com/webtoolkit/doc/latest/DevGuideRequestFactory.html

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2015-10-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-11-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多