0

设想

我有一个 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

4 回答 4

1

需要考虑的一些建议:

  • 列出威胁,并将每个威胁与您当前的设置进行比较。
  • 使用SSL/HTTPS。这减轻了整个类别的漏洞。
  • 使用用户名/密码,在服务器端生成并带外(通过邮件或电话)发送给用户。(希望这能回答问题 2)。
  • 使用两因素身份验证。为此,您可以查看安全令牌,例如RSA 的密钥卡类型小玩意儿或查看 Steve Gibson 的Perfect Paper Passwords
于 2008-10-07T11:18:42.997 回答
1

有几个简单的选项:

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

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

这有助于让客户放心,您的网站通常无法访问,但安全性对应用程序是透明的,一旦他们注册并收到证书,对他们来说也是如此。缺点是您在发布和跟踪用户证书时有管理开销——但这可能比您处理用户名/密码组合时要少。

于 2008-10-19T22:51:59.550 回答
0

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

于 2008-10-06T17:33:15.080 回答