c# - 在 C# 应用程序中保护数据层

标签 c# security architecture

我在考虑如何保护 C# 应用程序中的数据层,在这种情况下,该层可以是与应用程序本身一起存储的 LINQ to SQL 模型图,其中包含到 SQL Server 数据库的连接字符串。

或者它可能是应用程序和网络服务之间的连接。

要么您需要实现某种安全措施,例如,应用程序中的连接字符串很容易被逆向工程,Web 服务很容易被跟踪和用于应用程序原始目的之外的其他原因。

所以我的问题更简短:在处理 Web 服务和/或从 Windows 窗体应用程序直接连接到 SQL Server 时如何解决安全问题?

最佳答案

在您的情况下,有两种主要的攻击可能性:

  • 窃取连接字符串然后直接访问数据库
  • 不使用 UI 直接调用 C# 代码中的方法

对于连接字符串,您需要将其以加密形式存储在配置文件中。问题是 winforms 应用程序中需要有足够的信息,以便它可以解密和使用它。

要直接访问代码,您可以使用代码访问安全和混淆。

在你的情况下,我不会让 Windows 应用程序直接访问数据库。让 Windows 应用程序调用 WCF 服务,WCF 服务将访问数据库。

允许用户的用户帐号调用WCF服务,WCF服务运行在允许访问数据库的帐号下,用户的用户帐号无权访问数据库。

具有 3 层的 Windows 应用程序:

  • 用户界面
  • 业务(安全检查应该向用户显示什么 UI)
  • 代理

2 层的 WCF 服务:

  • 外观/业务层(安全检查是否允许用户使用此数据调用此方法)
  • Entity Framework 数据模型

两个层的通用 dll

  • 契约(Contract)/WCF 接口(interface)
  • 数据传输对象

有关代理、契约(Contract)和 DTO 的信息,请观看此视频:

http://www.dnrtv.com/default.aspx?showNum=103

关于c# - 在 C# 应用程序中保护数据层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1214621/

相关文章:

javascript - jQuery 和 Restful Web 服务安全

architecture - UML 和 OCL 之间的区别

c# - 在继续之前强制挂载 USB 拇指驱动器

c# - 发布到发送 NULL 值的 WCF 服务

ruby-on-rails - 如何破解您自己的 Rails 站点?

node.js - 从 node.js 应用程序中将字符串安全地存储在内存中

c# - 类库(适用于通用应用程序的可移植)System.Diagnostics.StackTrace 限制和引用针对另一个运行时的程序集

c# - Application Insights - 服务器没有显示任何数据

mysql - 推荐的 MySQL 数据库架构,以支持使用客户端拥有的数据的应用程序

c# - 在 MVC 4 中为 3 层架构配置 Ninject