有啥方法可以保护在开源项目中进行的 Web 服务调用? [关闭]

Posted

技术标签:

【中文标题】有啥方法可以保护在开源项目中进行的 Web 服务调用? [关闭]【英文标题】:Any way to secure a webservice call made in an open-source project? [closed]有什么方法可以保护在开源项目中进行的 Web 服务调用? [关闭] 【发布时间】:2011-12-22 16:59:10 【问题描述】:

我已经用 C# 编写了一个程序,我希望该程序在每次发生事情时在 mysql 数据库表中增加一个整数。但我不想从 C# 应用程序直接连接到数据库,它是一个开源程序,所以我需要对用户名和密码等做一些事情。

所以我想也许我可以创建一个 php 脚本来连接并在每次请求时增加该数字。然后我可以使用 C# WebClient 来调用那个 PHP 脚本(这将返回一个成功或错误字符串,具体取决于它的运行方式。)

但这样做的问题是,用户可以直接进入源代码,找到该 url 并滥用它,因此数字不正确。

所以我正在寻找一种安全的、不太先进的方式来保护我的网络服务,即使它是开源的。

是否有人想到了通过查看源代码使用户不可能/非常难以滥用的想法? :)

【问题讨论】:

所以澄清一下,您的 C# 应用程序是开源的,您希望该应用程序增加表中的字段,但数据库在某些服务器上归您所有,您不希望人们这样做可以滥用你的数据库吗?您能否描述一下您的高级目标(即您想跟踪使用情况)? 请澄清你想说的,现在你的问题没有意义 你不能真正让它开源,同时让它偷偷打电话回家。正如 Mateo 所说,您实际上想做什么? 嘿,这个问题还不错! 如果我错过了一些要点,我很抱歉。是的,我想跟踪使用情况。我拥有数据库并在服务器上运行它。你的意思有更好的方法吗? 【参考方案1】:

您不能在没有实际连接的情况下更改数据。作为要求,这没有多大意义。

编辑:我误解了这个问题,但现在我明白了......

我不知道真正安全的方法。由于他们有来源,因此没有真正的方法来混淆或加密无法破解的数据。他们总是可以调试应用程序,单步执行直到即将进行网络调用,然后获取 URL。

【讨论】:

当然你不能在不连接的情况下改变数据,但我想要一些关于改变数据的不同方法的建议,除了直接连接到 mysql 数据库。 @toxicious 是的,我没有意识到您指的是连接到网页(将执行数据库连接)而不是从远程 C# 应用程序连接。显然,使用网站作为网关是最好的主意,而不是将数据库暴露在公共空间中。 我明白了。好吧,我想我会选择一些不受保护的网站解决方案,只是希望我们生活在一个没有太多破坏的世界。毕竟这只是统计数据,没有什么重要的:)【参考方案2】:

在任何情况下——无论是直接连接还是对 PHP 脚本的请求——您都需要某种身份验证系统来避免滥用。如果您不想在源代码中硬编码用户/密码组合,有一个常见的解决方案:将该数据移动到外部配置文件,为该文件提供模板并将其添加到 repo。

例如,您可以将文件命名为 parameters.ini.dist,如下所示:

user = dummy-username
password = dummy-password

这就是你添加到 repo 中的文件。

想要使用您的程序的人将parameters.ini.dist 复制到parameters.ini 并将虚拟值替换为真实值。此文件是您的程序读取的文件,应在您的存储库中忽略它。

【讨论】:

它会起作用的。很抱歉我没有更好地描述我的问题。正如我在另一条评论中所说,我想跟踪使用情况。所以给每个人一个用户名和密码是行不通的。但无论如何都是好建议!

以上是关于有啥方法可以保护在开源项目中进行的 Web 服务调用? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在 C/C++ 中永远不使用标头保护?如果是这样,这种方法有啥优势吗?

有啥方法或想法来保护或签署源代码?

如何在不使用身份验证的情况下保护 RESTful Web 服务

有啥方法可以保护 IPA 中的图形/声音数据?

tomcat优化

保护 REST 服务和 Web 应用程序的最佳方法