如何安全地在GWT上生成HTML页面?

时间:2013-10-30 04:43:35

标签: java gwt rpc

我正在开发具有许多不同形式的GWT应用程序。这些表单的可见性取决于授权用户的类型。换句话说,我想做以下事情:

String type = rpc.getUserType(); // ask from server only ONCE

if(type.equals("advancedUser"))
{
   ContentPanel advPanel= new ContentPanel();
   add(advPanel);
}

if(type.equals("admin"))
{
   ContentPanel adminPanel= new ContentPanel();
   add(adminPanel);
}

我的问题如下: 从服务器只获取一次用户类型并在任何地方安全使用此变量?我的意思是有没有可能改变这个变量(如果它存储在客户端)?

我的朋友告诉我GWT在服务器端准备html,所以我可以安全地将类型存储在一个变量中并使用它 - 没有人可以访问它。

但我想,我必须在每个构造之前调用rpc,如if(userType=blah-blah-blah) add(something),因为我认为GWT将我的Java代码转换为在客户端运行的Javascript,并且所有变量都可以可以使用ArtMoney等程序进行修改。

1 个答案:

答案 0 :(得分:1)

  

我的问题如下:从服务器获取用户类型只一次,并且在任何地方使用此变量都是安全的吗?我的意思是有没有可能改变这个变量(如果它存储在客户端)?

是的,这是最可能和最强大的解决方案。更多我想建议,把它static

public static String USER_TYPE = rpc.getUserType();  

该变量应该使用onModuleLoad的第一个值初始化,并且应该在整个应用程序中。

  

但我认为,我必须在每个构造之前调用rpc,如if(userType = blah-blah-blah)add(something)

否则会通过网络引发性能问题和不必要的server调用。

  

因为我认为GWT将我的Java代码转换为在客户端运行的Javascript,所有变量都可以使用ArtMoney等程序进行修改。

GWT足够安全并使用混淆选项编译您的模块,这使您的代码在浏览器中无法读取。

单独使用混淆可以防止所有易受伤害的事情,还有一些其他步骤也需要采取睡眠快乐:)

我建议通过GWT security documentation

除此之外,

在服务器端保存或处理数据时,需要严格按照客户端进行检查,以避免出现这种情况。

在服务器端

if(clientsideUserType.equals(serverSideUserType))  // 
{
 // Then only insert/process data
}