加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ajax – 保护Web API免遭未经授权的应用程序

发布时间:2020-12-16 01:35:02 所属栏目:百科 来源:网络整理
导读:我正在使用一个使用大量 AJAX来与服务器通信的网页.反过来,服务器拥有广泛的REST / JSON API,可以显示Web客户端调用的不同操作. 此网站由匿名用户和经过身份验证的用户使用.正如您所期望的,经过身份验证的用户发出的Web服务调用需要身份验证,因此可以防止未
我正在使用一个使用大量 AJAX来与服务器通信的网页.反过来,服务器拥有广泛的REST / JSON API,可以显示Web客户端调用的不同操作.

此网站由匿名用户和经过身份验证的用户使用.正如您所期望的,经过身份验证的用户发出的Web服务调用需要身份验证,因此可以防止未经授权的用户或应用程序.

然而,该网站有很多功能,不需要身份验证,其中一些使用匿名Web服务.我使用的唯一方法是防止外部人员使用这个网络服务,这是通过使用CSRF token.我知道,CSRF令牌在这方面并不是非常有用的…在一段时间内,您可以了解如何使用Web服务,即使他们使用CSRF令牌.

当然,您可以使用CAPTCHA来防止应用程序或机器人自主地使用您的Web服务.然而,任何人都将能够使用它.

另一方面,在客户端和服务器之间共享密钥将是无用的.这是因为任何局外人从网页源代码中读取的能力.

我想使这些Web服务难以引用到任何第三方应用程序.除了使用CSRF令牌外,你还会做什么?听起来有点愚蠢,但嘿,也许这是愚蠢的,我只是失去了我的时间.

注意:鉴于此应用程序使用浏览器而不是“可执行文件”作为客户端,因此this question与讨论无关.我不能使用服务器和客户端之间的秘密(至少我不知道)

您可能比链接的问题中描述的问题更容易,因为您不需要向用户分发二进制文件.即使您的应用程序是开源的,HMAC /签名密钥(该答案的“请求签名”部分)也可以通过环境/配置设置进行控制.

总结:

>秘密密钥实际上并不是在客户端和服务器之间发送的.相反,它用于签署请求
>确保请求包含一些唯一/随机元素(您的CSRF密钥可能足够),以便对相同API数据的两个请求不相同.
>使用密钥对请求进行签名,并将签名附加到请求.您链接到PHP问题,但不清楚您使用的是哪种语言.在.Net中,我将使用HMAC类,如HMACSHA256.>在API服务器端使用相同的HMAC对象来验证请求是否使用相同的密钥进行签名.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读