我正在使用 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 服务?