如何加强混合ASP.NET 1.1 / Ajax解决方案的安全性?

时间:2008-10-06 17:31:15

标签: asp.net web-services security soap

方案

我有一个HTML / javascript网站,它使用javascriptSOAPClient与ASP.NET 1.1 Web服务进行通信,以便读/写SQL数据库。 (http://www.codeproject.com/KB/ajax/JavaScriptSOAPClient.aspx)。该数据库包含匿名人口统计信息 - 没有名字,没有信用卡,没有地址。基本上,收集的数据用于数据挖掘。

该网站已上线,但我们希望在此项目和未来项目中为javascript / ajax客户端和wbe服务之间引入更安全的通信。作为金融行业的承包商,在某些时候我们会被问到这个问题:这个网站是否可以破解?如果我们没有解决方案,我们可能会听不见。

我已经在遵循最佳实践,例如通过命令参数和存储过程与数据库通信)。但是,目前任何人都可以浏览我们的Web服务描述并找出如何使用我们的公开服务。

问题

  1. 使用我的混合解决方案(即不是端到端的Microsoft),我该如何在Web服务上验证客户端请求?
  2. 如果我开始将用户名/密码或其他可识别元素作为身份验证传递给Web服务,我是否应该关注如何在客户端生成/存储该密钥?

4 个答案:

答案 0 :(得分:1)

需要考虑的一些建议:

  • 列出威胁,并将每个威胁与当前设置进行比较。
  • 使用 SSL / HTTPS 。这减轻了一大类漏洞。
  • 使用用户名/密码,在服务器端生成并带外(在帖子中或通过电话)发送给用户。 (希望这回答问题2)。
  • 使用双因素身份验证。为此,您可以查看安全令牌,例如RSA's keyfob-type gizmos或查看Steve Gibson的 Perfect Paper Passwords

答案 1 :(得分:1)

从编程的角度来看,最简单的解决方案是使用双向HTTPS。也就是说,服务器向客户端提供证书,客户端向服务器提供证书。然后只有具有适当证书(由您发布)的客户才能连接。

这有助于向客户保证您的网站通常无法访问,但安全性对应用程序是透明的,并且一旦他们注册并获得证书,就会对他们有所帮助。缺点是你在发布和跟踪用户证书时有管理开销 - 但这可能比你处理用户名/密码组合要少。

答案 2 :(得分:1)

有几个简单的选择:

  1. SSL + Cookie
  2. 如果Web应用程序也是ASP.NET并与您的Web服务一起托管,那么您应该可以访问Web服务中的Web应用程序的用户/成员资格/会话(基本上是#1,但是您可以获得它做任何工作)。
  3. 如果网络应用和网络服务不在同一个域上,那么由于跨域问题而导致Cookie失败 - 因此您可以让网络应用将GUID嵌入到隐藏的表单字段中,并将该GUID用作一种cookie(它需要作为所有Web服务请求的参数传递)。

答案 3 :(得分:0)

您可以加入证书身份验证机制吗?那么只有拥有可验证密钥的客户才能进行通信?这就是我使用的产品如何让其托管设备与核心进行通信。