OAuth Redirect URI 검증 우회:
OAuth 인증 서버에서 redirect_uri를 검증할 때, 정확한 매칭이 아닌 부분 매칭이나
느슨한 URL 파싱을 사용하면, 공격자가 악의적인 리다이렉션 URI로 Authorization Code를 탈취할 수 있습니다.
https://app.example.com/callbackhttps://trusted-site.com/auth/callbackhttps://app.example.com.attacker.com/callbackhttps://attacker.com/callback?redirect=https://app.example.comhttps://example.com@attacker.com/callbackhttp://app.example.com/callbackhttps://app.example.com.attacker.com/callback?state=abc// 정확한 매칭 (권장)
$allowed_uris = [
'https://app.example.com/callback',
'https://trusted-site.com/auth/callback'
];
if (!in_array($redirect_uri, $allowed_uris, true)) {
throw new Exception('Invalid redirect_uri');
}
// 또는 URL 파싱 + 도메인 화이트리스트
$parsed = parse_url($redirect_uri);
if ($parsed['scheme'] !== 'https' ||
!in_array($parsed['host'], $allowed_hosts, true)) {
throw new Exception('Invalid redirect_uri');
}