【问题标题】:How do HttpOnly cookies work with Javascript and authentication proxies?HttpOnly cookie 如何与 Javascript 和身份验证代理一起使用?
【发布时间】:2021-03-14 10:04:59
【问题描述】:

我在 OIDC 反向代理后面有一个 Web 应用程序——换句话说,当我访问这个应用程序时,我被重定向到我的身份提供者,我登录并且我的浏览器设置了一个 cookie,该 cookie 用于后续请求以证明我已经登录了。

此 cookie 设置了 HttpOnly 标志,据我了解,这是防止恶意网站利用 XSS 漏洞的最佳做法。

但是,正如预期的那样,我的应用程序中的 Javascript 无法访问登录 cookie,因此在我的浏览器控制台中,我看到返回给应用程序的请求(尝试通过 HTTP 请求和 websocket 连接更新动态内容)被重定向到我的身份提供者(并被 CORS 政策阻止),因为他们无权访问登录 cookie。

  • 这是否意味着这样的架构不能使用Javascript回调应用程序?
  • 通常禁用 HTTPOnly 标志以允许 Javascript 在这种情况下工作吗?
  • 我的理解是,来自不同来源的恶意网站尝试访问我的应用程序的 Javascript 无论如何都会被 CORS 阻止,所以保留 HTTPOnly 标志是否仅有助于抵御攻击者设法将 Javascript 注入我的应用程序的攻击?

【问题讨论】:

    标签: javascript cookies openid-connect httponly


    【解决方案1】:

    这是否意味着这样的架构不能使用Javascript?

    没有。这意味着JS无法从cookie中读取数据。

    我看到返回给应用程序的请求(尝试通过 HTTP 请求和 websocket 连接更新动态内容)被重定向到我的身份提供者(并被 CORS 策略阻止),因为它们无权访问登录 cookie。

    CORS 政策不应因为缺少 cookie 而阻止请求。

    如果缺少 cookie,那可能是因为您 (a) 混淆了您的来源并且该来源没有 cookie,或者 (b) 您没有启用 credentials option跨域请求。

    禁用 HTTPOnly 标志以允许 Javascript 工作是否常见?

    没有。

    我的理解是,来自不同来源的恶意网站尝试访问我的应用程序的 Javascript 无论如何都会被 CORS 阻止,因此保留 HTTPOnly 标志是否仅有助于抵御攻击者设法将 Javascript 注入我的应用程序的攻击?

    是的。 XSS 攻击非常普遍,因此有许多工具可以缓解它们。这是其中之一。

    【讨论】:

    • 抱歉,我将第一个项目符号更新为 ...use Javascript to call back to the application。 CORS 阻止了请求,因为登录 cookie 不存在用于 Javascript 请求,因此我的 OIDC 代理正在触发重定向到不同来源的身份提供者。那么您是否同意使用这种架构,我必须在允许 Javascript 回调到我的应用程序以更新动态内容和保留 HttpOnly 标志之间做出选择?
    • 不,因为那无济于事。如果您设置credentials 选项,那么JS 将发出请求并且它没有凭据,因此将被阻止。如果您设置它,那么 JS 将发出一个预检 OPTIONS 请求以请求允许使用凭据发出跨域请求,并且预检将没有凭据,因此它将被阻止。
    • 酷,即使 JS 没有发出跨域请求,它也需要发出预检 OPTIONS 请求?因为如果不是,听起来删除 HttpOnly 标志就足够了?我想我也可以仅对 OPTIONS 请求禁用身份验证(不确定安全隐患)。
    • 我保证的最后一个问题
    • 如果它是相同的来源,那么就没有涉及 CORS,所以没有预检请求……也不需要删除 HttpOnly 标志,因为这只会阻止 JS 读取 cookie,而不是阻止在它被添加的地方发出请求通过引擎盖下的浏览器。
    猜你喜欢
    • 2015-07-12
    • 2021-08-13
    • 2020-12-04
    • 2018-04-22
    • 2018-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多