实施应用程序安全性 - App Level&数据库级别(ASP .NET和SQL Server 08)

时间:2010-02-19 11:06:50

标签: asp.net sql-server-2008 security

我即将部署ASP .NET应用程序(使用LINQ-to-SQL开发)。

我采取了以下预防措施:

  • 通过访问受限的用户访问数据库,但是,由于应用程序要访问敏感数据,我不能剥夺这个有限访问权限的用户
  • 数据库服务器未暴露给外部网络 - 隐藏在DMZ后面并且所有外部端口都被阻止
  • 我已经对网络应用程序进行了彻底的安全测试; SQL注入,权限管理,非法数据访问(通过post / get data tempering)
  • 应用程序正在SSL上运行

问题:

1 - 我正在使用ASP .NET授权API;任何避免会话劫持的建议(如果有人知道会话密钥)。是否有办法更改认证cookie不易受到威胁?比方说,在每次请求后更改它? (我知道我对这个特殊项目非常清醒)

2 - 数据库中的数据未加密。为了使事情变得更加安全,我正在考虑实施透明数据加密。有人可以分享他/她的经验或关于使用SQL Server 2008实现数据级加密的链接以及利弊吗?

3 - 在web.config中存储连接字符串的建议。使用集成安全性然后使用加密数据库连接字符串?

3 个答案:

答案 0 :(得分:1)

  1. 在我看来,这个任务足够标准的asp.net api。来自MS P& P团队的very good article关于保护您的表单身份验证,它应该对您有帮助。
  2. 我没有这样的经历,但这里是link with article
  3. 我不知道:(
    另外我建议检查AntiXSS工具,它可以显示一些潜在的xss漏洞。最后一点,从不信任用户输入

答案 1 :(得分:0)

集成安全性是您最强的选择。

答案 2 :(得分:0)

  1. 我不是ASP.Net专家,但在我的PHP项目中,我加密了cookie并将其关联到特定的客户端IP。这样会话就无法迁移到其他客户端。最终,如果您想要绝对确定,不能依赖cookie进行身份验证,而是使用HTTP Digest,因为浏览器将透明地重新验证领域内的每个请求。不幸的是,这个选项不适用于内置的ASP.Net成员资格提供程序,因为它们提供的HTTP摘要选项至少可以说是半脑(仅对AD进行身份验证)。
  2. 您试图通过加密数据来缓解哪些具体威胁? TDE旨在减轻意外媒体丢失的威胁(即,有人发现你的旧磁盘上有所有数据,或者你丢失了带有数据库的笔记本电脑)。这也是大多数其他数据库加密方案(如列加密或文件级加密(位锁定器))可以缓解的威胁。其他威胁,例如对数据库的访问的意外泄露(即有人向您的数据库发现SQL注入向量)无法通过TDE缓解,因为数据库将向任何经过身份验证的用户提供解密数据。为了缓解这种威胁,这意味着数据是用用户提供的密钥加密的(即,只有用户会话可以解密数据,因为会话知道密钥密码的eonyl),但这会破坏所有这些加密的“透明”方面方案。让用户使用自己的密钥密码对数据进行加密可以保护来自其他用户(其他会话)的数据,因此它更强大,但是非常难以“正确”,并且用户始终面临风险通过忘记/丢失密钥密码将自己锁定在自己的数据之外。
  3. 使用加密的集成安全性和存储连接字符串。由于加密Web.Config中的字符串非常简单,并且在ASP部署和操作中得到很好的支持,所以就这样做。加密字符串可以再次保护IIS / ASP主机与非管理员帐户的意外危害。管理员帐户或运行ASP的帐户始终能够读取加密的连接字符串。由于最可能的攻击向量将始终是ASP妥协(即SQL注入和朋友),攻击者很可能即使在加密时也能够读取连接字符串,因此没有那么多的好处,但每一点点计数。