2

我正在开发一个跨平台应用程序,该应用程序将使用 C++-> 移动设备和 Perl-> 台式电脑(如 Windows /Linux/Mac OS)创建。

现在,由于该应用程序可以下载,我担心黑客获取我的应用程序源代码的能力。

具体来说,该应用程序将连接到我的中央数据库——至少,我希望黑客无法获取我的数据库连接详细信息。理想情况下,我不希望代码的任何部分被黑客入侵。

基本上,用户可以使用这个应用程序更新他的一些信息——如果黑客掌握了这些数据,他们可以很容易地改变任何不幸的用户的数据。我想到的一件事是,用户最初必须使用 OAuth/OAuth2 进行身份验证(使用他的电子邮件 ID @yahoo/@hotmail/@gmail)——只有在那之后,应用程序才会真正显示管理界面。但无论如何,在某个时候,应用程序将连接到中央数据库——这就是为什么我不希望数据库的访问细节受到损害。

很多组织都在做这样的应用程序,所以他们自己一定也面临着这类问题吗?我想知道如何保护我的应用程序(最好是整个代码),并至少保护数据库凭据。

4

4 回答 4

5

简单的答案是您不公开您的数据库。曾经。

在顶部添加一个服务层(可以是基于 HTTP 的,但不是必须的),它将处理身份验证和授权。然后,您的应用程序会使用用户的凭据登录并代表他们执行操作。您的服务层公开了您的应用程序与之通信的 API,但您的服务会发出并控制对数据库的所有调用。

您已经提到了 OAuth - 这是向此类 API 添加身份验证的一种完全可以接受的方式。

于 2012-11-10T11:47:26.300 回答
4

你不能。

从好的方面来说,您可以在服务器上设置安全性。连接客户端提供他们是给定用户的凭据。服务器在证明请求被允许后生成 SQL 命令。支持者可以做任何您的应用程序可以做的事情,但您的应用程序将无法对您的数据库做出不良行为。

于 2012-11-10T11:44:56.387 回答
1

前面的答案是绝对正确的。您需要一个基于服务器的服务层,它提供身份验证/授权代码并与数据库交互。但是,这并不总是一个完美的世界,如果您坚持要求这些应用程序必须充当数据库客户端,您希望尽可能地限制暴露。通常这是通过让客户使用尚未被授予对通用数据库的任何访问权限的特定帐户来完成的。然后,您创建特定的存储过程,这些过程只能执行应用程序所需的操作和查询。这可以防止任何在代码中找到凭据的人在数据库中做任何不希望的事情,但您仍然会遇到任何人都可以通过查看代码来冒充他人的问题。没有 在没有服务器端组件的情况下防止这种情况的方法。对于封闭/受信任的用户组来说,这可能没问题,但我不会使用这种方法向公众发布任何内容。

于 2012-11-11T00:28:14.083 回答
0

如果可以,请使用 OAuth2 并允许受信任的第三方处理身份验证。Twitter、Facebook 和 GitHub 对安全性都比较偏执;另一张海报是正确的:永远不要将直接数据库访问作为用户有权访问的应用程序的一部分公开;把它放在自己的服务后面。

祝你好运!:)

于 2012-11-11T21:15:11.780 回答