net*_*rog 21 .net c# security protection data-protection
我正在研究保护我的代码免受反编译的方法.
这里有几个好的线程描述了混淆和代码打包作为保护代码的可能方法.但是,当使用字符串方法/属性名称时,混淆不适用于反射.许多人不建议使用混淆.
所以我现在决定不再使用上述任何一项.但是,我有部分代码需要加密,例如,带有IP的数据库连接字符串,登录名和密码都存储在代码中const string
,与电子邮件帐户数据一样简单.
在ASP.NET中,有一个选项可以将敏感数据移动到.config
文件并对其进行加密,但这需要服务器密钥,即链接到单个计算机.我没有读太多关于它,但我想类似的东西可用于桌面应用程序.但我需要这个在任何安装了应用程序的计算机上工作.
这里有一个问题:有没有办法对这些数据进行编码/保护,使其无法与反编译代码一起阅读?
emb*_*oss 17
首先建议不要直接在代码中存储任何敏感内容.无论你多么巧妙地试图对它进行模糊处理,你总是可以对其进行逆向工程.
我已经阅读过诸如将密码分成几个部分,将它们放在代码中的不同位置并在最终使用它们之前通过一系列函数运行它们之类的东西......虽然这会使事情变得更难,但您仍然可以始终监视应用程序使用调试器,最终您将能够检索秘密信息.
如果我正确地解释了您的场景,那么您所拥有的代码是在某个客户端部署的代码,并且您的代码连接到数据库(我想这也是在客户端的监督下),连接到它需要密码.该密码对于该客户端是已知的,因此尝试将其从客户端隐藏起来是相当无用的.什么,你不希望是限制访问来自任何人说密码谁不应该知道这一点.
您通常通过将敏感信息放在应具有非常严格权限的文件夹中的单独文件中来实现此目的,只有应用程序和少数选定人员才能访问.然后,应用程序将在运行时根据需要访问信息.
此外加密单独的文件原来是一个问题 - 如果你这样做,所以那时就涉及这再次将不得不以某种方式保护的关键 - 无限递归是它的方式:)安全访问文件往往是足够了,但如果你真的需要尽可能安全,那么解决方案就是对文件使用基于密码的加密.但这里的想法不是将密码存储在系统的另一个位置,而是存储带外信息(例如在物理保险库中)并在启动应用程序时输入密码.这也存在问题:(重新)启动应用程序需要物理存在人员,您仍然可以从运行应用程序的机器的RAM中检索密码.但如果没有专门的硬件,它可能是最好的.
基于密码的加密的另一个好的替代方案是依赖于特定于操作系统的"密码保险库",例如Windows的" 隔离存储",在完全不加密和保持密码带外之间需要进行权衡.
Pad*_*ddy 11
这不是加密答案,但"安全"的一种方法是通过Web服务进行所有数据库调用.然后,您的连接凭据将存储在您的安全服务器上,客户端会通过该服务器传递所有呼叫.
没有任何敏感存储在你的可重新分配中......
我过去一直在努力解决这个问题,并提出了三种处理问题的方法,但我不确定它们是否完美:
归档时间: |
|
查看次数: |
20036 次 |
最近记录: |