【问题标题】:Java EE security - application clientsJava EE 安全性 - 应用程序客户端
【发布时间】:2009-03-03 08:49:34
【问题描述】:

我正在编写一个 Java EE 项目,该项目将包含来自 3-6 个不同客户端的所有内容。该项目是开源的,我想知道可以/应该使用哪些安全机制。问题是:因为它是开源的,我相信任何拥有用户的人都可以编写自己的客户端(可能不现实,但确实有可能)并与服务器/数据库联系。我尝试过以不同角色将不同数据读/写到数据库的所有场景,我得出结论,我必须有一些比这更高级别的安全机制(它不是 em> 足以检查是否允许该帐户类型使用该 ID 保留该实体,依此类推...)。在某种程度上,我必须知道联系的客户是 写的正确客户。签署 Jar 文件可以解决整个问题,还是有其他方法可以解决?

-Yngve

【问题讨论】:

    标签: java security jakarta-ee


    【解决方案1】:

    我真的认为,如果限制服务器端的可用活动(基于角色)是不够的,那么你就会遇到更大的问题。即使用户不编写自己的客户端,您用于远程调用的任何机制都可能容易被拦截和操纵。最重要的是,您应该限制可以对服务器进行的可能调用,并且应该将对服务器的每次调用都视为潜在恶意。

    您能想到一个示例场景,其中允许特定经过身份验证的用户执行的服务器操作如果他们使用您的客户端会很好,但如果他们不使用您的客户端会很危险?如果是这样,我认为您过于依赖客户。

    但是,除了批评之外,我还想尝试为您的问题提供一些实际答案。如果您想象的是恶意用户,我认为签署您的 jar 文件是不够的。一般来说,公钥加密可能对您没有多大帮助,因为正在对您的源进行逆向工程的假设恶意用户将可以访问您的公钥,因此可以欺骗您构建的任何身份验证。

    最终,系统中必须有您信任的人,因此您必须弄清楚该人是谁,并将您的安全性建立在他们周围。例如,让我们假设在特定公司中可能有许多您不一定信任的用户,以及一个监督他们的管理员,您确实信任他们。在这种情况下,您可以设置您的客户端,以便管理员在启动时输入一个特殊代码,并将该代码保存在内存中并与任何请求一起传递。这样,即使用户对您的代码进行逆向工程,他们也不会拥有管理员代码。当然,从您的客户端到您的服务器的调用仍然容易被拦截和操纵(更不用说这个要求会让您的用户感到头疼)。

    底线:如果您的用户的机器正在调用您的服务器,那么您的用户正在调用您的服务器。不要相信你的用户。限制他们可以做的事情,无论他们使用什么客户端。

    【讨论】:

      【解决方案2】:

      好吧,任何人都可以使用源代码,但部署和数据库的配置肯定不是。部署应用程序时,您可以添加具有角色的用户。最简单的做法是将它们保存在数据库中。当然,表的内容只有数据库管理员可以访问。数据库管理员将配置应用程序,以便它可以访问所需的表。当用户尝试登录时,他/她必须提供用户名和密码。应用程序将读取该表以对用户进行身份验证/授权。

      这种类型的安全性是最常见的一种。为了真正安全,您必须通过安全路径 (HTTPS) 传递凭据。为了获得更高程度的安全性,您可以使用 HTTPS 客户端身份验证。为此,您可以为每个客户端生成一个公钥并使用服务器的私钥对其进行签名。然后客户端需要在每个请求中发送这个签名密钥。

      编辑:能够编写他/她自己的客户端的用户不会降低应用程序的安全性。如果需要先登录,他/她仍然无法访问该应用程序。如果登录成功,则将创建一个会话(cookie),并将其与每个请求一起传递。看看Spring security。它确实有一个相当陡峭的学习曲线,但如果你只做一次,那么你可以在几分钟内为任何应用程序添加安全性。

      【讨论】:

      • 我有用户名/密码的角色(当然),但这并不能解决用户编写自己的客户端的能力问题。但后半部分很有趣。感谢您的回答。
      • 您说的是网络吗?这不是一个 Web 应用程序,它是一个分布式 Java EE 应用程序。如果用户有一个用户/密码对,他可以编写自己的客户端并使用该用户/密码。然后他会登录。不是吗?据我所知,他肯定会在我们的系统上。
      • 用户名和密码是硬编码的吗?在这种可怕的情况下,是的,他可以登录。如果根据数据库检查这些,那么您可以随时更改它们。分布式 Java EE 应用程序也使用会话。
      • 不,它们不是硬编码的。假设您是一个用户,其用户/通行证存储在数据库中。然后您编写自己的应用程序客户端并使用该用户/密码登录。当然,您随后也会登录,但运行您自己的代码会造成安全威胁。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-06-15
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多