在GWT RPC调用中编码请求有效负载

在GWT RPC调用中编码请求有效负载,gwt,gwt-rpc,Gwt,Gwt Rpc,我正在使用GWT创建我的web应用程序 从客户端(浏览器)进行RPC调用时,在inspect元素中,我的请求负载如下所示: 7|0|8|https://xxxx.xxxx.in/TestProject/in.TestProject.Main/|87545F2996A876761A0C13CD750EA654|in.TestProject.client.CustomerClassService|check_User_Login|java.lang.String/2004016611|in.Test

我正在使用GWT创建我的web应用程序

从客户端(浏览器)进行RPC调用时,在inspect元素中,我的请求负载如下所示:

7|0|8|https://xxxx.xxxx.in/TestProject/in.TestProject.Main/|87545F2996A876761A0C13CD750EA654|in.TestProject.client.CustomerClassService|check_User_Login|java.lang.String/2004016611|in.TestProject.Beans.CustomerBean/3980370781|UserId|Password|1|2|3|4|3|5|5|6|7|8|6|0|0|0|0|0|CustId|0|0|0|0|0|0|0|0|0|
在该请求中,用户名、密码和客户ID等所有详细信息都显示在请求负载中


我的问题是,是否可以对请求负载编码或隐藏这些细节?

您看到的抽象级别是错误的。在有效负载中编码/隐藏这些值有什么意义?您在服务器和客户端之间交换的所有内容都可以被截获除非您使用HTTPS。它确保了服务器和客户端之间的安全/加密通信。不要试图变得“聪明”,只加密部分通信/有效负载,只需使用HTTPS即可

但我担心的是,客户端本身不应该能够看到我们正在进行的方法调用、请求中的参数类型、参数值等。它应该对客户端隐藏

但是,这些参数值是由用户自己输入的,或者是在应用程序中的某个地方硬编码的(用户总是能够看到/破译这些值,因为他的浏览器必须这样做)。因此,你试图实现的目标从来都不是一个好主意。我将把注意力和精力集中在保护端点(GWT-RPC服务)、验证发送到那里的输入等方面

您必须记住一件事——用户可以访问应用程序客户端部分的源代码(已编译和缩小,但仍然如此)。因此:

  • 他总是能够弄清楚如何与服务器通信,因为应用程序必须这样做
  • 他可以修改应用程序以发送恶意请求,即使您创建了一些假设的参数/地址编码方式。在编码完成之前找个地方,瞧。Firebug和其他开发工具将在这方面为您提供巨大帮助

因此,以这种方式“保护”客户端是毫无意义的(当然,CSRF、XSS等应该是您关注的问题),恶意用户总是会绕过它,因为您必须为其提供所有工具,否则,“普通”用户(或其浏览器)将无法使用您的应用程序。

谢谢@Ovi Faur,但是我没有从这个文档中得到任何解决方案,因为它与编码或隐藏请求负载无关。是的。这就是我刚才评论的原因。也许可以解释更多:DThanks@Igor Klimer,但我担心的是客户端本身不应该能够看到我们正在进行的方法调用,请求中的参数类型,参数值等。它应该对客户端隐藏。请查看我的更新答案-它太长,无法发表评论。