【问题标题】:Javascript redirect vulnerabilityJavascript 重定向漏洞
【发布时间】:2022-10-04 19:28:52
【问题描述】:
假设我将 url 路径存储在像 /?return_back_to=/foo/bar 这样的查询参数中
然后将其传递给像 Microsoft 这样的外部身份验证服务,该服务进行登录并使用我的查询参数返回相同的 url。
此时,从查询参数中获取值并使用 React navigate() 重定向到此 url 是否安全?还是这被认为是“开放重定向漏洞”?
【问题讨论】:
标签:
javascript
reactjs
authentication
security
redirect
【解决方案2】:
这取决于谁在调用该端点。知名身份提供者将要求您设置允许的重定向 url,并且只会发回授权的(您设置的)。所以他们只会在没问题的情况下调用回调,这样你就可以安全地重定向。
但是,其他任何人都可能使用带有不同参数的此 url(指向它的链接),您不想导航到该参数,这将是一个开放重定向。因此,您需要确保请求实际上来自受信任的来源,即。来自 Azure AD。根据您实施的流程,您可以验证收到的令牌以确保它是有效请求,或者至少您可以检查 Origin / Referer 标头以查看调用者是谁(无法更改Javascript 中的 Origin 或 Referer,因此攻击者无法让合法用户访问带有恶意重定向的链接,其 Origin 来自 Microsoft)。
此外,如果您只在自己的源(域)中重定向,您可以并且应该添加重定向路径 (return_back_to) 是内部的验证,例如以 / 开头和/或不包含 ://。