我想使用ASP.NET创建一个安全的网站,但是当我发布它时,域管理员可以看到存储在我的数据库(SQL Server)中的所有数据。我也想隐藏域管理员的数据和代码。有没有办法做到这一点?请给我一个我可以使用的好域名的地址,这将给我我网站的所有管理权限(域所有者也无法访问我的数据库和文件。)感谢您的建议。
答案 0 :(得分:2)
答案 1 :(得分:1)
你可以加密数据,但没有办法保护代码(特别是没有面向网络的代码),但坦率地说这个问题没有意义 - 如果你与某人有信任问题,那么你就有了隐含的信任关系需要找到一个不同的提供商。
如果您不信任任何人(个人心理学不能承受),您需要自己主持。
附录:从另一方面来看,为什么你会为某人安置一些东西而不能检查它是否安全甚至是法律问题?
答案 2 :(得分:1)
您是否考虑过使用Virtual Private Server?我相信使用VPS,您应该能够完全控制谁可以访问操作系统级别的内容。
答案 3 :(得分:1)
如果您想要完全安全,那么您需要实施的一些事项:
正如其他人所说,您需要对数据库进行物理加密。仅仅阻止他们访问数据库是不够的,因为他们可以访问物理数据库文件,并可以使用它们上的工具直接访问数据。
您将需要使用web.config加密
Walkthrough: Encrypting Configuration Information Using Protected Configuration
How To: Encrypt Configuration Sections in ASP.NET 2.0 Using DPAPI
这是相当可疑的安全性,但是因为它需要在服务器上安装密钥容器,所以可以为恶意管理员复制密钥然后使用它来手动解密web.config。为了进一步保护自己,您需要创建一个安全的Web服务(保护消息传输,SSL和安全消息,内容本身在SSL传输隧道内加密,请参阅WCF服务安全性),您的应用程序经常与之对话对于受保护的数据,如sql server数据库的登录用户,然后应用旋转密码,如果他们拦截了一个密码,如果它已被轮换,它可能不再有效。
在此之后,您将需要使用包含反编译保护和代码混淆的源代码保护。这将增加一层保护,禁止直接查看应用程序的源代码,以获取有关保护应用程序的其他信息的信息(尽管这只会阻止复杂的破解者)。
总而言之,您已经在托管环境中实现了几乎最高级别的代码/数据安全性,但这又回到了核心问题。如果您担心系统操作员是邪恶的,那么如果管理员足够熟练且有足够的动力去做,那么所有这些保护甚至仍然可以被打败。
如果您需要在此之上和之后进行保护,您真的想要查看主机托管或至少专用服务器托管,这将允许您在操作系统级别应用加密,因为这可以保护您免受最有效的蛮力攻击只涉及从机器上撕下硬盘驱动器,用空气除尘器倒置喷射ram来冻结它,然后试图从与服务器断开连接的ram中窃取加密密钥。
让您免受(或接近免疫)这种攻击的安全性基本上需要使用TrueCrypt对您的文件系统进行本机加密,而您没有将密钥/密钥文件缓存在内存中。此时,安全性的唯一最后一部分是在一个信誉良好的数据中心(如ThePlanet或Rackspace)上进行托管,该数据中心具有24/7电子监控功能,如果一名邪恶的员工几乎不可能在没有视频录制的情况下破坏您的服务器它发生了。
答案 4 :(得分:0)
从sysadmin角色中删除BUILTIN\Administrators
组 - 显然这只能由服务器管理员完成,但在适当的环境中,域管理员可能只能维护服务器而不能看到数据
2008年,默认情况下不包括此内容。
至于代码,你可以对你的DLL进行模糊处理,但没有完全的方法来隐藏可以访问文件系统的人的代码。
答案 5 :(得分:0)
您将无法隐藏源代码,但您确实有一些选项可以减少对管理员的邀请:
混淆 - 阻止人们在语法上知道发生了什么。虽然他们可以遵循代码并最终弄清楚(如果他们想要),但它需要更多的努力。毕竟,只要有足够的努力和技术诀窍,任何事情都可能被破解。
加密 - 因为网页需要由服务器解密,服务器需要有密钥才能解密。此密钥需要存储在服务器(以及管理员)可以访问的文件中。使用一些混淆,你可以尝试隐藏它(再次),但任何地方都有对称加密,超级用户有能力获得它。
注意:
任何时候加密,很可能需要解密来使用/查看。该过程将对性能产生负面影响。
当事情被加密时,特别是从管理员的角度来看,它本质上是一个要求警报的邀请;它创造了好奇心。如果它是数据,这是一回事,但代码不需要在有信任的地方加密。这就像是说你有一些你想隐藏的东西,通常意味着你不想发现的“坏”。