"Finder, Open With, drag/drop, NSOpenPanel 로 파일을 여는 건 별도의 standalone 파일-열기 경로야. macOS/사용자 의도가 권한자라서 파일 URL 을 실을 수 있어."
문 둘, 권한 둘
'경로는 절대' 를 네 레슨 내내 말한 뒤에, 그 규칙이 도그마가 안 되게 잡아주는 반전이 여기 있어. Ashen Reel 은 사실 경로를 늘 열어. 파일을 창에 드래그하거나, Open With 를 쓰거나, open panel 에서 고르면, 진짜 파일 URL 이 흘러들어와. 그리고 그건 아무 문제 없어. identity-only 규칙은 경로가 나빠서가 아니었거든. 누가 타겟을 고르느냐에 관한 거였지.
Recall 딥링크랑 사용자 파일-열기는, 권한 출처가 다른 두 개의 다른 문이야. 딥링크는 웹 페이지가 흉내낼 수 있는 안 신뢰된 호출자한테서 오니까, identity-only 랑 양쪽 검증을 받아. 파일-열기는 사용자 본인한테서, macOS 가 중개해서 와. 그러니 경로가 실릴 딱 맞는 자리야. 키보드 앞에 앉은 사람이 권한자고, 걔가 일부러 그 파일을 골랐으니까.
왜 코드에서 떨어뜨려 둬야 하나
실수 두 개를 상상해봐. 모든 Finder 열기를 identity-only 해석기로 흘려보내면, 정상 사용이 깨져. Desktop 에 있는 사용자 본인 MKV 는 video_id 가 없으니까, 완벽히 정상인 파일이 안 열리거든. 반대로 Recall 딥링크를 사용자-열기 경로로 흘려보내면, 트랙 통째로 없앤 그 경로 수용을 공격자한테 딱 넘긴 거고. 문은 물리적으로 떨어져 있어야 해. 각자 자기 신뢰 가정을 자기 함수에 실은 채로.
두 진입점을 나란히 놓고, 각각 신뢰가 어디서 오는지 정직하게 봐.
규칙, 일반화하면
이건 비디오 플레이어를 한참 넘어서 써먹을 패턴이야. 들어오는 길이 하나 넘는 앱은 다 권한이 하나 넘어. CLI 플래그랑 config 파일, API 요청이랑 어드민 콘솔, webhook 이랑 사람이 채운 폼. 이런 것들이 같은 신뢰를 받을 자격은 드물어. 규율은 각 진입점의 권한을 소리 내서 이름 붙이고, 그것에 맞춰 검증하는 거야. 사람한텐 너무 빡빡하고 낯선 이한텐 너무 헐거운 하나의 미지근한 정책으로 평균 내는 게 절대 아니라.