我们有一些项目,我们将所有数据访问放在一个单独的Web服务项目中,而父项目将调用Web服务以获取与数据相关的所有内容。 Web服务仅接受来自Web项目服务器的连接。我的假设是,Web服务不太容易受到入侵这种影响。我不确定这是否正确。
这比将数据访问放在父项目中的类或dll中更安全吗?
请注意
我之上的开发人员做出了这个决定。
答案 0 :(得分:2)
我认为这不是保护数据库安全的有效方法。在保护数据层的各种方法中,我认为将类库中的调用移动到Web服务是保护自己的有效方法。
更好的方法是确保使用参数化查询或存储过程来阻止SQL注入,并将登录的权限限制为仅需要执行的操作。
但是,在单独的Web服务中进行数据访问会有其他争议......例如可重用性或面向服务的体系结构。如果需要从多个服务器上的各种项目中获取相同的数据访问层,那么通过使用Web服务,您不需要在整个地方重复使用相同的类库...这会让您担心哪个项目有哪个版本的数据访问层。
那么,更安全吗?我不这么认为......其他好处?大概...
答案 1 :(得分:1)
简答:是的
更长的答案:我的假设是,暴露服务的Web服务器位于其自己的防火墙之后。这样做可以使数据库免受入侵,如果黑客能够破坏您的应用程序服务器,就会强迫黑客通过另一层。由于应用服务器上不存在数据库连接字符串,并且防火墙阻止了从该服务器到数据库的直接连接,因此黑客需要以某种方式穿透该防火墙并获得对托管数据服务的服务器的访问权。
现在,我还假设Web服务不仅仅是公开像
这样的方法execute(string sqlCommand)
如果是这种情况,那么这个解决方案实际上可能更少安全,而不仅仅是使用没有Web服务的数据库。为了使此解决方案真正更安全,您可能希望在Web服务服务器上创建特定于操作的方法。
答案 2 :(得分:1)
据我所知,无法从Web访问和执行DLL。 Web服务可以。如果这是真的,那么Web项目(甚至Web服务)引用的类库比直接封装该逻辑的Web服务更安全。
此外,还有整个关注点分离的概念。在我看来,数据访问逻辑属于一个单独的层,完全独立于业务逻辑。在设计良好的体系结构中,Web服务公开了代表业务事务的离散方法 - 不一定是数据事务。业务事务封装了一个或多个数据事务,这些事务由封装数据访问逻辑的单独类表示,并提供安全性以确保从不发生SQL注入。
其他人自然也许不同意。我们是开发人员。我们不同意这是我们的天性。 :)