从机密文件中读取
Reading from a confidential file
(看到我在那里做了什么吗?)
我正在开发一个 WinForms 应用程序,它需要从包含敏感信息的文件中检索信息。检索到的信息用于执行一些复杂的计算,但它包括诸如一家大公司员工的某些薪资范围的薪水之类的东西。 WinForms 应用程序最终需要部署给该公司的成员,但我需要确保不会向他们透露此文件的内容。
文件本身是一个 JSON 文件,当前存储在本地 Visual Studio 项目文件结构中。
如果我要通过 Visual Studio 的构建菜单 "Publish" 这个应用程序,并通过网络发布它 link,人们能打开这个 JSON 文件并查看它?如果是这样,有什么办法可以避免这种情况吗?我考虑过在线存储文件并通过 HTTP 请求访问它,但是我对此不太了解,所以可以提供一些建议。
干杯,
乔什
我会考虑创建一个单独的(WebAPI 或 WCF)服务,该服务可以访问该文件并知道如何将其面向 public 的部分提供给您的应用程序。
所以我们假设文件位于 \hrserver\C$\sensitive.dat
。您的服务可以访问该文件,但客户端应用程序不能。您的客户端应用程序访问服务 (https://hrserverhelper/GetHrData
),该服务将 authentication/authorization 封装到该文件。然后它解析出敏感数据(可能来自您已经设置为该文件创建的 JSON),并将 non-sensitive 数据传递给您的客户端应用程序。
如果事实证明 所有 文件中的数据都是敏感的,那么让您的服务提供操作来执行您的 WinForms 应用程序当前执行的计算。例如,您的 WinForms 应用程序将它希望执行的输入提交给知道如何使用敏感数据执行这些计算的 WebMethod - WebMethod 吐出结果。
但是,在这种情况下,请注意基本的数学技能可能能够对此处的 "sensitive" 数据进行逆向工程。如果我提交 2 并取回 4,我提交 3 并取回 6,我将假设 "sensitive" 数字为 2.
If I was to "Publish" this application through Visual Studio's Build menu, and release it through a web link, would people be able to open up this JSON file and view it?
是的。
If so, is there some way this can be avoided?
只有不发布文件。
您应该考虑将此信息存储在数据库中,该数据库只能通过授权帐户通过 HTTPS 访问。我建议使用 WCF,因为它可以很好地与 C# 和 WinForms 集成。最好的方法是在服务器端执行计算(在 WCF 服务本身或作为数据库中的存储过程)。因此,您只需要在客户端收集输入,将这些输入传回服务器,然后显示结果。
您还可以做一些事情,例如记录所有访问此数据的尝试(成功与否),以便您拥有完整的审计线索。如有必要,您还可以将 WCF 服务公开给其他客户端。
(看到我在那里做了什么吗?)
我正在开发一个 WinForms 应用程序,它需要从包含敏感信息的文件中检索信息。检索到的信息用于执行一些复杂的计算,但它包括诸如一家大公司员工的某些薪资范围的薪水之类的东西。 WinForms 应用程序最终需要部署给该公司的成员,但我需要确保不会向他们透露此文件的内容。
文件本身是一个 JSON 文件,当前存储在本地 Visual Studio 项目文件结构中。
如果我要通过 Visual Studio 的构建菜单 "Publish" 这个应用程序,并通过网络发布它 link,人们能打开这个 JSON 文件并查看它?如果是这样,有什么办法可以避免这种情况吗?我考虑过在线存储文件并通过 HTTP 请求访问它,但是我对此不太了解,所以可以提供一些建议。
干杯, 乔什
我会考虑创建一个单独的(WebAPI 或 WCF)服务,该服务可以访问该文件并知道如何将其面向 public 的部分提供给您的应用程序。
所以我们假设文件位于 \hrserver\C$\sensitive.dat
。您的服务可以访问该文件,但客户端应用程序不能。您的客户端应用程序访问服务 (https://hrserverhelper/GetHrData
),该服务将 authentication/authorization 封装到该文件。然后它解析出敏感数据(可能来自您已经设置为该文件创建的 JSON),并将 non-sensitive 数据传递给您的客户端应用程序。
如果事实证明 所有 文件中的数据都是敏感的,那么让您的服务提供操作来执行您的 WinForms 应用程序当前执行的计算。例如,您的 WinForms 应用程序将它希望执行的输入提交给知道如何使用敏感数据执行这些计算的 WebMethod - WebMethod 吐出结果。
但是,在这种情况下,请注意基本的数学技能可能能够对此处的 "sensitive" 数据进行逆向工程。如果我提交 2 并取回 4,我提交 3 并取回 6,我将假设 "sensitive" 数字为 2.
If I was to "Publish" this application through Visual Studio's Build menu, and release it through a web link, would people be able to open up this JSON file and view it?
是的。
If so, is there some way this can be avoided?
只有不发布文件。
您应该考虑将此信息存储在数据库中,该数据库只能通过授权帐户通过 HTTPS 访问。我建议使用 WCF,因为它可以很好地与 C# 和 WinForms 集成。最好的方法是在服务器端执行计算(在 WCF 服务本身或作为数据库中的存储过程)。因此,您只需要在客户端收集输入,将这些输入传回服务器,然后显示结果。
您还可以做一些事情,例如记录所有访问此数据的尝试(成功与否),以便您拥有完整的审计线索。如有必要,您还可以将 WCF 服务公开给其他客户端。