当前位置: 首页 > 面试题库 >

什么时候可以安全启用CORS?

陈淳
2023-03-14
问题内容

我正在开发JSON / REST Web API,为此,我特别希望第三方网站能够通过AJAX调用我的服务。因此,我的服务正在发送著名的CORS标头:

Access-Control-Allow-Origin: *

允许第三方站点通过AJAX调用我的服务。到目前为止一切都很好。

但是,我的Web api的一个子部分是非公开的,需要身份验证(带有OAuth和access_token
cookie的相当标准的东西)。在我网站的此部分也启用CORS是否安全?

一方面,如果第三方网站可以具有也与我的服务的这一部分进行交互的ajax客户端,那将很酷。但是,首先要有一个相同的原产地政策的原因是这样做可能有风险。您不希望以后访问的任何网站都能够访问您的私人内容。

我担心的情况是,用户通过网站或他信任的网站登录我的Web api,却忘记了注销。这是否将允许他随后访问的其他所有网站使用现有会话访问其私人内容?

所以我的问题是:

  • 在非公开内容上启用CORS是否安全?
  • 如果启用了CORS的服务器通过cookie设置了session_token,该cookie是否保存在CORS服务器或主网页服务器的域下?

问题答案:

在回答第二个问题时(如果启用了CORS的服务器通过cookie设置了session_token
…?),该cookie将保存在CORS服务器的域下。网页的JS代码即使通过也无法访问cookie
document.cookie。cookie仅在.withCredentials设置了属性时才发送到服务器,即使那样,它也只有在服务器设置Access- Control-Allow-Credentials标头时才被接受。

您的第一个问题是更多开放的话题。它是相当安全的,但是有一些规避事物的方法。例如,攻击者可能使用DNS中毒技术,使预检请求命中实际服务器,但将实际CORS请求发送到恶意服务器。以下是有关CORS安全性的更多资源:

  • http://code.google.com/p/html5security/wiki/CrossOriginRequestSecurity
  • owasp.org CORS备忘单

最后,您担心的是允许 任何 网站访问您的CORS数据。为了防止这种情况,您不应使用Access-Control-Allow-Origin: *标题。而是应回显用户的Origin值。例如:

Access-Control-Allow-Origin: http://www.example.com

此标头将仅允许http://www.example.com访问响应数据。



 类似资料:
  • 问题内容: 我想标题很清楚我要问的内容。我创建了这个小提琴:http : //jsfiddle.net/Sourabh_/HB7LU/13142/ 在小提琴中,我试图复制一个场景。这只是一个示例,但是在AJAX调用中,如果我不使用该列表,则不会更新。我想知道每次进行AJAX调用来更新列表时是否可以安全使用?是否可以使用其他机制? 我编写的用于复制场景的代码(与小提琴相同): 的HTML JS 问题

  • 问题内容: 我一直在阅读有关Android内存泄漏的文章,并观看了来自Google I / O的有关该主题的有趣视频。 尽管如此,我还是不完全理解这个概念,尤其是当Activity中的用户内部类是安全或危险的时候。 这是我的理解: 如果内部类的实例生存时间长于外部类(活动),则将发生内存泄漏。-> 在什么情况下会发生这种情况? 在此示例中,我假设不存在泄漏的风险,因为匿名类扩展不会比活动寿命更长,

  • 问题内容: 在最近的项目中,我建议在测试工具代码中捕获RuntimeException并将其记录下来。该代码处理来自数据库的一系列输入,并且我不希望由于任何一个输入(空值,非法参数等)失败而导致测试停止。不用说,我的建议引起了热烈的讨论。 捕获任何一种RuntimeException是否可以接受?如果是,那么可以捕获RuntimeExceptions的其他方案还有哪些? 问题答案: 捕获此异常的原

  • 问题内容: 有效的Java建议我们不要这样做 。总是对的吗? 在许多情况下,仅捕获身体。 如果我不接听电话,如何检查发生的地点? 而且,如果我抓住了但身体空了,那我们那时就无法获得任何堆栈信息,可以吗? 更新 我分析了在Google Android源AOSP4.2.2_r1.2中捕获RuntimeException的统计信息。 有249个RuntimeException捕获,并且以下是catch-

  • 问题内容: 我从jls找到了报价: 相等运算符可用于比较两个可转换(第5.1.8节)为数字类型的操作数,或两个boolean或Boolean类型的操作数,或 两个分别为引用类型或null类型的操作数 。所有其他情况都会导致编译时错误。 但是这段代码 每个操作数都是参考! 说这是不兼容的类型。 jls在哪里说这些类型应该兼容? 问题答案: 在15.21.3节(参考相等运算符==和!=)中: 如果无法

  • 我找到了JLS引文: 表示它是不兼容的类型。 在jls中哪些地方说这些类型应该兼容?