Java EE安全性 - 应用程序客户端

时间:2009-03-03 08:49:35

标签: java security java-ee

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

-Yngve

2 个答案:

答案 0 :(得分:1)

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

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

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

最终,您信任的系统中必须有某人,因此您必须弄清楚这是谁,并以您的安全为基础。例如,假设某个公司可能有许多您不一定信任的用户,以及一个监督他们的管理员,您信任的人。在这种情况下,您可以设置您的客户端,以便管理员必须在启动时输入特殊代码,并将该代码保存在内存中并与任何请求一起传递。这样,即使用户对您的代码进行反向工程,他们也不会拥有管理代码。当然,从您的客户端到您的服务器的呼叫仍然很容易被截获和操纵(更不用说这个要求对您的用户来说是一个巨大的痛苦)。

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

答案 1 :(得分:0)

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

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

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