通过 GET 方法调用 WCF jQuery AJAX 中的安全问题

Posted

技术标签:

【中文标题】通过 GET 方法调用 WCF jQuery AJAX 中的安全问题【英文标题】:Security Issue in WCF jQuery AJAX Call via GET method 【发布时间】:2013-05-12 15:45:06 【问题描述】:

我正在使用 GET 方法通过 jQuery AJAX 调用来使用 WCF 服务。

由于我无法使用 POST 方法通过 jQuery AJAX 获取 WCF 调用,因此我使用的是 GET 方法。使用 GET 方法,WCF 方法的 URL 通过 javascript 公开。因此,应该有一种方法可以使用加密或任何其他方法来保护前端和后端之间的通信。

因此,我构建了一个身份验证字符串。身份验证字符串可以定义为在前端 (JavaScript) 加密并在后端 (WCF) 进行身份验证的一组唯一数据。身份验证字符串可以包括用户名、密码、WCF 服务名称、WCF 方法名称和时间戳等信息。

示例:加密唯一数据的组合:admin_admin_member_getmemberbyid_201305171604,即 816dd1f8cd17256fc343948df5ffdf3b(使用 MD5)并在发送到后端的数据之外发送。

使用MD5加密,在前端组合一些关于操作的信息可以被加密;在后端,必须对相同的信息组合进行加密和验证。由于 MD5 无法解密,因此您无法加密数据。任何知道用于构建要加密的字符串的组合的人都可以生成 MD5 哈希并使用。

与 MD5 不同,共享密钥加密可用于对数据进行加密,以便在后端使用预共享密钥解密来检索原始数据。但是,在前端源码中可以看到预共享密钥。因此,加密变得毫无用处。

在公钥加密中,安全性在于必须猜测或破解两个因素。一种是数据或参数模式,另一种是身份验证字符串。但是,如果您在浏览器上调试,仍然可以从 JavaScript 中读取。

注意:由于网络延迟等任何延迟,在 MD5 字符串或预共享密钥中使用时间戳在实践中可能会失败。

有没有一种方法可以保护通过 REST 使用 GET 公开的 WCF 服务?

【问题讨论】:

【参考方案1】:

OAuth 是您的答案。

http://dotnetopenauth.net/

那里有很多例子。如下所示。

http://www.codeproject.com/Tips/372422/Secure-WCF-RESTful-service-using-OAUTH

http://fszlin.dymetis.com/post/2011/05/20/Protecting-WCF-Data-Services-using-OAuth.aspx

【讨论】:

以上是关于通过 GET 方法调用 WCF jQuery AJAX 中的安全问题的主要内容,如果未能解决你的问题,请参考以下文章

通过 GET 将数组传递给 WCF 服务

如何在 jQuery 中使用 WCF 方法

使用 POST 方法从 jQuery Ajax 调用 WCF 服务

从 Jquery 调用的 WCF:不允许的方法

从 jQuery AJAX 调用 WCF 服务方法返回 404

当 WCF 方法抛出异常时,使用空响应调用 jQuery 成功回调