如何防止用户修改我的数据文件?

4
我正在负责一个项目,该项目将替换我们制造车间中的旧软件。其中一个问题是当前的配置文件、脚本缓存等都是明文存储在用户使用的系统上。很多东西都会被推到限制访问网络位置,但像配置文件这样的东西仍然保留在本地。用户认为他们知道如何操作系统并修改配置文件已经成为了一个问题。我不希望在新软件中再次发生这种情况。我应该如何预防?加密?进行某种签名/校验和数据库查找?C#/.NET提供了哪些功能来帮助我解决这个问题?
更新:针对评论中提出的一些问题,制造车间中的每个用户都具有管理员访问权限。由于大部分安全性来自于限制对网络文件夹、Web服务和数据库的访问,因此这种情况不太可能很快改变。权限是理想的解决方案,但我必须在提供的环境下工作。我计划在与IS的会议中提出这个问题,看看是否可能改变,但目前假设用户具有完全访问权限。

这是WinForms还是WebForms? - Decker97
这将是一个 WPF 应用程序。 - MGSoto
权限...我没有真正考虑过这个问题,但现在的情况是,制造车间的每个人都拥有他们登录的系统的管理员访问权限,我认为这种情况短时间内不会改变。 - MGSoto
6个回答

5
这不是C#编码问题,而是系统配置问题。设置机器,使用户拥有普通(非管理员)帐户。设置您担心的配置文件的文件权限,以便任何人(包括当前用户运行的应用程序)都可以读取配置文件,但只有管理员才能写入配置文件。最后,不要给用户管理员密码。如果您的应用程序还需要能够写入配置文件,则必须添加代码以在应用程序中转换为管理员模式,最好仅在写操作周围这样做。

1
我需要和我们的IS部门商量一下,我没有权限去取消授权。我希望特定的用户能够像你提到的那样登录管理员模式,并能够修改配置文件,这个操作有多复杂? - MGSoto
1
进入管理员模式的代码有些棘手,但是通过网页搜索或 StackOverflow 搜索可以找到一些例子。 - dthorpe

4
为了防止普通用户手动修改配置文件,您可以使用该文件内容的SHA与程序中仅知道的某个秘密因素连接后对配置文件进行签名。显然,这不是真正或完美的秘密,但足以防止用户简单篡改。
基本上(伪代码):
function isValidConfig(configPath, signaturePath) {
  return readFile(signaturePath) == SHA(readFile(configPath) + secret)
}

function writeConfig(contents, configPath, signaturePath) {
  writeFile(configPath, contents)
  writeFile(signaturePath, SHA(contents + secret))
}

除非对程序进行反编译,否则他们不能篡改配置。我假设你的生产车间没有顶尖黑客…


这更接近我的想法。有没有办法让它更安全一些?我能想到几个人可能会故意破坏它。虽然他们破坏的可能性很低,但我希望尽力防止这种情况发生。 - MGSoto

2
这似乎是数字签名的一个好应用。数字签名将提供数据的完整性和身份验证。也就是说,数字签名将检测数据(配置文件)是否已更改,并且数据来自可信源。数字签名是通过对数据进行哈希并使用公钥/私钥对中的私钥加密哈希来创建的。应用程序将解密加密的哈希值,计算数据的哈希值,并将解密的哈希值与计算的哈希值进行比较。如果哈希值匹配,则数据有效。如果不匹配,则数据已被篡改。
.Net 在 DSACryptoServiceProvider.VerifyHash 中包含这些功能。
当然,如果您不想费心去创建公钥/私钥对,您可以只使用配置文件的简单哈希来确保其未被篡改。
真正重要的问题是:当应用程序检测到已篡改的配置文件时,您将采取什么措施? 你是否打算让应用程序退出、锁定某些功能、向你发送电子邮件、尝试获取配置文件的良好副本?这些操作被称为完整性检查失败的惩罚。目前,你的应用程序没有对配置文件执行完整性检查,但是当你添加检查时,你需要决定在失败时采取最佳行动方案。

1

一个选择是尽可能将配置文件中的内容移动到IsolatedStorage或更好的数据库中。普通用户很难知道如何访问它们。


1

我会将文件保存在某种结构化存储中,可以是隔离存储、轻度加密的 ZIP 文件或类似我们的 SolFS 虚拟文件系统(也加密)。拥有一个文件的次要好处是可以轻松地复制备份。


0

我不是本地安全方面的专家,但也许你可以使用文件系统权限来防止用户访问给定的文件夹或文件。

然后,如果你的应用程序需要访问此文件,则必须使用具有修改文件权限的不同 Windows 帐户启动应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接