Javascript 跨站点XMLHTTPRequest是否会重复使用凭据?

Javascript 跨站点XMLHTTPRequest是否会重复使用凭据?,javascript,xmlhttprequest,csrf,basic-authentication,Javascript,Xmlhttprequest,Csrf,Basic Authentication,有一个具有JSON API的开源守护程序。此守护进程强制使用基本HTTP身份验证。我正在考虑提交一份PR,以便始终发送访问控制允许来源:标题,以允许其他网页使用该API,但我希望确保它不存在安全风险 如果用户登录到API,我知道来自同一域的AJAX请求会自动获得HTTPAuthorization头。根据我的测试,如果请求来自另一个域,则情况永远不会如此 所有浏览器都是这样实现的吗?恶意站点只有知道您的creds,才能执行对API的请求,并且不可能(除了浏览器漏洞)通过JavaScript获取cr

有一个具有JSON API的开源守护程序。此守护进程强制使用基本HTTP身份验证。我正在考虑提交一份PR,以便始终发送
访问控制允许来源:
标题,以允许其他网页使用该API,但我希望确保它不存在安全风险

如果用户登录到API,我知道来自同一域的AJAX请求会自动获得HTTP
Authorization
头。根据我的测试,如果请求来自另一个域,则情况永远不会如此


所有浏览器都是这样实现的吗?恶意站点只有知道您的creds,才能执行对API的请求,并且不可能(除了浏览器漏洞)通过JavaScript获取creds,只要您没有设置响应头,我是否正确,它将不允许对读取数据的API请求进行授权(请求仍将发出,但由于存在错误,其他域无法读取响应)

您仍然应该对有后果的方法实施保护,即对您的系统进行未考虑的更改。CSRF是恶意站点可以发出跨站点请求,然后重新使用浏览器中的用户凭据的地方

我还建议这样做,而不是设置

Access-Control-Allow-Origin: *
您仅将此标头设置为API的允许使用者。例如,在AJAX请求中,将发送
Origin
头:

Origin: https://example.com
当您收到此请求时,您应该在后端数据库中签入
https://example.com
是授权消费者。如果是这样,您将输出此标题:

Access-Control-Allow-Origin: https://example.com

这将防止
evil.com
由于您的CORS实施而被允许绕过同源策略。如上所述,在您的测试中,当您通过JavaScript手动添加
授权
头时,它似乎不会被浏览器缓存,但并非所有浏览器都是平等创建的,采取这些额外步骤将是一个很好的安全预防措施。

如果您将授权头添加到允许的头列表中,是否会发送授权头<代码>访问控制允许标题:授权即使启用了此功能,我的浏览器也不会发送凭据,因此我认为这是安全的。是的,看起来如果我只允许
授权
标题,我可以用JavaScript手动设置标题。我没有发现任何安全问题。无论如何,添加CSRF保护可能是个好主意,以防浏览器以不同的方式处理此问题。