我正在构建一个 RESTful JSON api,我担心json 数据盗窃和Cross-Site Request Forgery。
为解决这两个问题而创建的一个很好的解决方案是Origin http 标头。但是我担心这种方法与所有现代浏览器都不兼容。这是一个有效的担忧吗?由于兼容性问题,Origin http 标头是否无用?在执行HTTP 引用检查时是否应该考虑来源?
我正在构建一个 RESTful JSON api,我担心json 数据盗窃和Cross-Site Request Forgery。
为解决这两个问题而创建的一个很好的解决方案是Origin http 标头。但是我担心这种方法与所有现代浏览器都不兼容。这是一个有效的担忧吗?由于兼容性问题,Origin http 标头是否无用?在执行HTTP 引用检查时是否应该考虑来源?
这是兼容浏览器和已知问题的列表。现在由您决定是否可以忍受这些限制:
这是一个有效的担忧。有人可能正在使用不完全支持它的旧浏览器。测试版中也可能存在错误。
还可以考虑添加 X-Frame-Options: SAMEORIGIN
到您的 JSON API 以防止有人将您的网站包含到 iframe 中。
还可以考虑在返回的 JSON 响应前添加特殊字符,并在 JSON 解码器中手动将它们去掉。这就是 Google 的做法: 为什么 Google 会在前面添加 while(1);到他们的 JSON 响应?
此外,为了额外的安全性,请考虑为每个请求包含一个随机数,并签署请求以验证它来自您的代码而不是网络钓鱼站点。这类似于OAuth1.0 的工作方式。另一种方法是为每个会话生成一个自动过期的令牌,并在需要时刷新令牌。这就是OAuth2.0的工作原理。这允许按需使访问无效,例如,如果您发现错误,则旧客户端必须升级。