如果我在.NET中有一个简单的CRUD app可执行文件,是什么阻止用户将其加载到RedGate Reflector并查看所有内容,包括数据库连接字符串,密码等?
我能以任何方式防止这种情况发生吗?
答案 0 :(得分:3)
不,您可以做的最好的事情是对程序集进行模糊处理以使其更难以阅读和理解,但除此之外,无法阻止某人使用Reflector或ILDASM查看程序集中的IL。
请记住,CLR也需要能够读取此程序集,因此如果CLR可以读取程序集,那么其他任何人都可以读取它。
答案 1 :(得分:2)
混淆绝不是正确的答案。也许你的方式错了。
我可以通过几种方式来考虑连接字符串不可用或不重要。
您可以将数据库放在Web服务之后,以便只有Web服务才能知道数据库的连接字符串。当然,您需要另一种方法来限制对Web服务的访问,例如使用登录凭据。
或者,您可以为每个用户提供自己的SQL登录名/密码。这样,他们就会知道自己的用户名/密码,但很容易从数据库中“关闭”。这也使您可以更好地控制每个人对数据库本身的访问权限...比如他们可以访问的表/视图以及访问的类型。
答案 2 :(得分:1)
你可能很难这样做(混淆,字符串加密等),但只要用户有权访问可执行文件,就不可能进行逆向工程。
答案 3 :(得分:1)
包括数据库连接字符串,密码
在数据库引擎中定义安全性:限制用户,限制用户可以连接的计算机,限制用户可以执行的操作,和/或指定用户只能通过定义的“存储过程”与数据库进行交互。
答案 4 :(得分:1)
这取决于你想要保护的东西。
如果是带有密码的DB连接字符串,则不要存储它们,例如:设置IIS App Pool以运行有限的服务帐户以连接到数据库和可信安全性。假设有良好的数据库安全性,对服务器名称等的了解是无用的。
答案 5 :(得分:1)
您可以将密码和连接字符串放在哈希表或xml中,然后对数据进行加密,制作一个带有密码的zip文件,该文件隐藏在图像后面隐藏着速记的文本文件中。在使用连接字符串并填充清理变量之后,所有解压缩和读取都会在读取后进行释放,刷新内存,调用收集器。只保留内存中需要的数据,小心使用ram。
答案 6 :(得分:0)
Obfuscation将是一种选择。但我想你无法隐藏,例如密码字符串完全。这真的不安全。