# 값 타입에 목적지를 직접 넣어 무엇이 통과하는지 본다 String[] endpoints = { "https://169.254.169.254/latest/meta-data/", "https://metadata.google.internal/computeMetadata/v1/", "https://10.0.0.5:8080/internal", "https://192.168.1.1/admin", "https://[fd00::1]/ula", "https://user:pw@evil.example.com/", "http://169.254.169.254/latest/meta-data/", "http://evil.example.com/x", }; 통과 https://169.254.169.254/latest/meta-data/ 통과 https://metadata.google.internal/computeMetadata/v1/ 통과 https://10.0.0.5:8080/internal 통과 https://192.168.1.1/admin 통과 https://[fd00::1]/ula 통과 https://user:pw@evil.example.com/ 거절 http://169.254.169.254/latest/meta-data/ -> endpoint must be https outside the loopback interface 거절 http://evil.example.com/x -> endpoint must be https outside the loopback interface # 이웃 호출처는 같은 결함을 이미 고쳤고, 고치면서 무엇이 남았는지 적었다 // requireExternallyRoutable, not requireSecureOrLoopback. The scheme check accepted any HTTPS // URL, so `https://169.254.169.254/` — the cloud metadata service — and every RFC 1918 address // passed. The stronger guard was written for exactly this call site and then called from // nowhere: it existed, its own tests were green, and the two sites it was written for kept the // weaker check. # 그 엔드포인트가 가는 곳 113: return new NotificationHttpRequest( 114- "POST", 115- subscription.endpoint(), 116- JdkNotificationHttpGateway.headers(headers), # 그 값을 만드는 main 코드 — 저장이 아니라 저장된 것을 되읽는 경로다 AesGcmContactPointProtector.java:217: return new WebPushSubscriptionValue( 64: public ProtectedContactPoint protect(ContactPointValue value) { 86: public ContactPointValue reveal(ProtectedContactPoint protectedValue, AccessContext context) { 210: private static WebPushSubscriptionValue parseWebPush(String stored) { # 접수 유스케이스는 그 채널을 주소 문자열로 받지 않는다 case EMAIL -> EmailAddress.parse(address); case SMS -> new PhoneNumber(address); case IN_APP -> new InAppRecipientRef(address); case PUSH, WEB_PUSH, WEBHOOK -> throw new IllegalArgumentException( "channel " + channel # 알림 플랫폼 마스터 스위치의 출하 기본값 486: enabled: ${APP_NOTIFICATION_PLATFORM_ENABLED:false}