谁拥有安全性?

问题描述:

我一直在使用开发多层应用程序如下:谁拥有安全性?

  1. ASP.Net - UI层
  2. WS - 业务服务层
  3. WS - 数据服务层
  4. SQL - 数据库Layer

安全性是架构师,开发人员还是基础架构的责任?

更具体地说是层与层之间的安全性。

我想答案将是以上所有。

但是,我只是想知道人们的经历是什么 - 特别是在非敏捷环境中工作?是否应该在技术设计文档中设计一切并确定安全性(我不了解)?

+2

我会说严重依赖于公司政策。 – DevSolar 2010-10-25 11:10:56

让我们面对它,如果安全不被大家所拥有的,那么它将没有任何人拥有。 (我相信Ricky Bobby表示第一)。

这个问题是一个文化问题。大多数组织都非常重视安全性,但仅仅因为他们对此不太了解而做了糟糕的工作。当您考虑处理top ten security vulnerabilities有多简单时,不可原谅。因为一旦你明白它真的很容易。

简单的例子:

你敏感的应用程序需要对数据包嗅探器一样提琴手得到保护。您必须

  1. 在浏览器和客户端之间打开SSL/TLS以保护它 。 这是您在问题中提到的UI 层的责任。
  2. 启用 Web服务器和您的业务服务 层之间的WS- *堆栈。这是业务服务层员工的责任 。
  3. 在 业务服务层和数据层 层之间启用WS-Secure。数据层的人必须做 那。
  4. 而且您需要实施服务 代理或使用数据库中的密钥。 Here's所有的链接。 这必须由DBA完成。
  5. 所有这些都需要由您的经理 协调并由您的建筑师设计。

所以你看,它必须在整个组中完成,因此必须是一个文化主题,而不只是另一个要检查的框。

嘿,我觉得你完成这件事的痛苦。道具给你提高酒吧!

+0

真的很喜欢这个答案 - 很好的概述。我有安全的想法,但缺乏“我们应该这样做”。 – Datoon 2010-10-25 15:16:37

应用程序需要设计时考虑到安全性,此外还需要以安全的方式进行开发。最初的责任在于设计规范的系统架构师,然后由开发人员正确实施(由架构师监督),最后,Web服务器必须从系统管理员和/或基础架构中获得保护。最大的问题是,中间层的开发人员往往认为从系统中的其他组件获得的所有内容都将得到验证,但通常情况并非如此,并且可能导致一些难以追踪安全漏洞。因此,每个层必须作为自己的安全沙箱开发,以防止数据泄露。

我想说它主要是要求的责任。只有当你有明确的安全要求/政策时,才能实施和测试它。

是否是数据库层取决于几个因素;安全数据库是可能的,但往往是昂贵的 - 我指的是:

  • 更少的连接池,如果你使用的连接身份
  • 开销,如果你要的数据/连接
加密

但它的一个选项(尽管它通常为最安全关键的应用程序保留,即使DBA不允许读取数据)。除此之外......安全在很大程度上是一个交叉问题。您肯定会需要特定于UI层的安全实现(因为它正在处理cookie等),但大部分工作倾向于成为业务逻辑的一部分。

我必须同意每个人的看法,安全必须是每个人都共享的设计/实现问题,并且必须跨越所有层。我为一家非常大的公司工作,该公司从事大型内部Web应用程序,每个人使用该系统都是值得信赖的人员,并且安全性仍是首要关注点。

下面是它从一个层面来看我的web应用程序如何分解。当向Web应用程序发送请求时,在子域级别上存在公司范围内的安全性,其中服务器只有only allows SSL (HTTPS) communication。还有另一台服务器(网络设备)拦截对应用程序的请求,并根据用户名和密码以及将要访问的URL处理logging people into the application(身份验证)。

当请求到达UI层时,它会通过另一个安全检查来验证用户登录(授权)时发送的用户凭证和组。这是determine what actions the user can do in the system。 在业务服务层,我们实现业务安全逻辑(使用AOP)过滤出用户不被允许查看的某些数据(例如关于他/她自己的信息)。这将允许在一个位置完成筛选,即使它在UI的不同位置被调用。

在数据访问层或SQL公司只允许stored procedures。这样可以确保DBA知道所有对数据库的调用(DBA是唯一有权修改数据库模式的人),并且没有一个开发人员可以潜入错误的SQL中。要访问数据库,我们使用一个特殊的用户ID和一个在配置文件(公司政策和FedRAMP requirement)中加密的密码。

当数据返回到屏幕显示时,我们偶尔会将custom hash添加到我们不希望用户篡改的某些数据。

安全性应该成为公司和部分应用程序特定的部分标准。如果您的公司有architect,他/她将帮助您定义不同用例需要安全的位置以及需要覆盖基础结构/公司提供的默认安全性的位置。对于实际的代码,开发人员通常会指出如何在特定流程中实现安全性,并找出需要建筑师确定的安全性的流程。在应用程序编码和设置后(最好在staging or integration environment中),您需要应用程序安全团队的someonetest应用程序以确保其功能符合预期,并且没有security flaws

让我知道如果这个回答你的问题......