当域“A”包含来自域“B”的图像时,不会出现登录弹出窗口。图像位于受基本 http auth

域“A”包括来自域“B”的图像


<img src="https://DOMAIN_B/basic-auth/protected_image/secure.jpg">


域“B”具有基本的 HTTP 身份验证。


<?php

    header("HTTP/1.1 401 Unauthorized");

    header("WWW-Authenticate: Basic realm='Please login'");

    exit;

?>

我的问题是为什么域“A”上没有出现登录弹出窗口。Chrome 给出错误“401 未授权”。但从技术上讲,浏览器应该会在域“A”上弹出登录显示。另一方面,本地和https://jsfiddle.net/w493nnp9/18/一切正常。


您可以访问此链接,页面显示登录弹出窗口。但是为什么其他域不显示。 https://jsfiddle.net/w493nnp9/18/


茅侃侃
浏览 157回答 2
2回答

Helenr

如果它显示登录表单,那将是对站点 B 的潜在 CSRF 攻击。让我们假设用户重复使用他们的密码,这不是一个强有力的假设,很多人都这样做。如果站点 A 包含来自基本身份验证站点 B 的图像,则用户会认为站点 A 正在请求他们的密码。如果它与站点 B 上的相同,他们将登录到站点 B 而没有任何意图。从那时起,由于基本的身份验证信息一直持续到浏览器关闭,站点 A 可以对站点 B 执行常规 CSRF(当然,除非有保护,应该有,因为用户也可能故意登录到 B )。即使在站点 B 上有进一步的 CSRF 保护,如果在您的场景中显示登录弹出窗口,它也会使 http 基本身份验证天生容易受到登录 csrf 的攻击。

HUH函数

登录弹出窗口不显示在<img>标签中,弹出窗口将显示在<iframe>示例中:<iframe src="https://httpbin.org/basic-auth/user/passwd">为什么其他域不起作用?这是因为其他域具有“跨域”策略(查看响应标头)。例如:您提供的链接“&nbsp;https://httpbin.org/basic-auth/user/passwd&nbsp;”,有Access-Control-Allow-Origin:*这里*表示这个域允许每个人获取数据。检查您的域“B”标头响应是否具有“Access-Control-Allow-Origin”。基本上域“B”需要有 header =“Access-Control-Allow-Origin:*”,才能工作。
打开App,查看更多内容
随时随地看视频慕课网APP