【问题标题】:GWT RPC Data Encryption and gwt-crypto issueGWT RPC 数据加密和 gwt-crypto 问题
【发布时间】:2011-08-27 17:40:54
【问题描述】:

我有一个 GWT 应用,它部署在应用引擎上。该应用程序基本上是一个考试模拟器。所有考试问题和答案都存储在服务器上的 XML 文件中。我使用 JAXB 解析器来解析 XML 文件并通过 GWT RPC 将对象列表发送到客户端。

我注意到在传输过程中(服务器 -> 客户端),整个数据在 Firebug 中以纯文本形式显示。由于数据(考试问题和答案)是我的知识产权 (IP) 并且我非常重视,因此我担心窃取这些数据非常容易。因此,我试图找到一些方法来进行一些基本的加密并在内容从服务器发送到客户端时对其进行混淆。

在谷歌上搜索后,我遇到了 gwt-crypto 项目,几分钟之内,我就可以得到我想要的确切结果。服务器将加密数据,客户端将对其进行解密。在 Firebug 中,它将以加密格式显示数据,而不是纯文本。

但是,我遇到了一个问题。实施加密/解密后,我注意到我的应用程序不会加载到我公司的网络中,这显然受到防火墙的保护。该应用程序可以在家中完美运行,甚至可以在我手机上的 3G 网络上运行。该应用程序的另一个版本不使用加密/解密,可以在我公司的网络中完美运行。我通过创建 2 个完全相同的应用程序版本来确认这一点,唯一的区别是一个布尔标志,它决定加密/解密是启用还是禁用。

我有以下问题:

  1. 达到我想要达到的结果的最佳方法是什么? gwt-crypto 是一个很好的解决方案吗?我可以用任何简单的方法在传输过程中混淆数据。它不一定是复杂的算法。

  2. 启用加密/解密的 GWT 应用程序无法在防火墙内运行的可能原因是什么?我真的对此一无所知。

对于这个问题的任何帮助,我将不胜感激。

【问题讨论】:

  • 我们很清楚,您知道用户可以通过屏幕截图来捕获您的知识产权。您在哪里尝试保护数据?只是在传输过程中,还是在到达客户端浏览器时?
  • GregS - 我完全理解这一点。我只是想让普通用户感到困难。我只是想在运输途中保护它。他们当然可以达到截屏或重新输入内容的程度,或者查看源代码并将其复制粘贴出来。我只是不喜欢通过 Firebug 或其他此类工具以纯文本形式公开大部分内容的想法。因此,这不是制作 100% 安全系统的问题。如果您有更好的解决方案,我愿意尝试一下。谢谢。
  • 对于传输,您将使用 SSL,而不是尝试使用 GWT-crypto 自行推出。
  • 你是对的。但是 GAE 不支持自定义域 (AFAIK) 的 SSL,我不想将 myappid.appspot.com 域用于我的应用程序。谢谢。
  • 你在潜入兔子洞。您可以做的任何事情都不会让用户无法提取您的数据,而且您可能实施的任何事情都不会让它变得更加困难。例如,我可以使用 Firebug 或 Chrome 开发工具来查看计算的 DOM,并在您的代码解密后提取文本。我认为您高估了“您的”数据对其他人的价值以及您的潜在对手是谁。

标签: google-app-engine gwt encryption


【解决方案1】:

使用 SSL 是正确的方法。

在您的情况下,鉴于 AppEngine SSL 限制,您应该从非 SSL 域正常加载 HTML,并使用 cross-site RPC 通过 SSL 域加载您的数据。

更新:

What is the best way to achieve the result that I want to achieve?

如果您想保护传输中的数据,那么唯一安全的选项是 SSL/HTTP。通常它也是最简单的一种,因为它不需要您更改应用程序代码,只需更改服务器配置。在您的特定情况下(具有私有域的 appengine),如上所述,它需要更多的工作。

 Is gwt-crypto a good solution for that?

没有。 gwt-crypto 使用密钥加密/解密数据。您还需要一种安全的方式来分发此密钥。

I'm fine with any simple approach to obfuscate the data during transit.

Security through obscurity 不安全。这是一种虚假的安全感,比没有安全感还要危险。只有一个有技术能力的学生能破解这个就足够了,很快每个人都会这样做。

可能的攻击是这样的:

  1. 窥探网络,获取用户的用户名/密码。
  2. 以该用户身份登录,让浏览器加载考试数据,这些数据现在在内存中未加密。
  3. Dump the DOM 并检查它是否有考试问题。

-

What could be the possible reason for a GWT app, with encryption/decryption
enabled, not working inside a firewall?

使用 firebug 确保网络连接相同,但加密内容除外。防火墙不应该工作那么深。与系统管理员交谈。

【讨论】:

  • 谢谢,彼得。我浏览了那个链接,但我很难将它与我的要求以及您的建议联系起来。我承认我没有足够的知识来理解它。那么你能详细说明如何去做吗?在这一点上,我只是想混淆内容,而不是真正关心使其非常安全。一个简单的解决方案,比如 gwt-crypto,就可以很好地满足我的要求。
  • 彼得,你的更新绝对有用。自定义域的 SSL 在 GAE 路线图上,现在已经过期了。我正在等待他们开箱即用地提供它。在这一点上,我愿意接受风险并默默无闻(而不是真正的安全),因为我现在发布的数据是整个集合的一个子集,几个月后就会出现。我对你所说的没有异议,并且同意 SSL 是要走的路。我会尝试与系统管理员交谈。同时,您知道任何替代方案吗?我无法以纯文本形式向所有人展示所有数据。谢谢。
  • 我尝试通过在 GAE 上部署的一个测试应用程序上启用 SSL 来进行一些测试。我注意到在客户端,我仍然可以在 Firebug 中以纯文本形式看到从服务器传来的内容。这是它应该如何工作,还是我在测试中遗漏了什么?
  • 是的,萤火虫是“内部”浏览器。它会在脱离 HTTPS 后看到通信。
  • 我也是这么解释的。感谢您确认这一点。所以,SSL“不会”解决我的问题。使用 gwt-crypto 进行加密,至少当我看到从服务器的 RPC 调用接收到的数据时,它显示了加密信息。客户端进行解密并在 UI 上显示问题。显然,这并不能使其以任何方式安全,但至少它确实增加了一层额外的晦涩。彼得 - 非常感谢您耐心地回答我的每一个问题并引导我朝着正确的方向前进。
猜你喜欢
  • 2011-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
  • 2011-03-22
  • 1970-01-01
相关资源
最近更新 更多