반듯한 정사각형은 누가 붙였는지 알려 주지 않는다.
QR 코드는 긴 문자열을 종이에서 휴대전화로 옮기기 쉽게 한다. 그 편리함은 읽기가 행동으로 바뀌는 순간을 가릴 수 있다. 안에는 주소뿐 아니라 이메일 작업이나 네트워크 설정이 있을 수 있다. 실행 전에 풀어 쓴 요청을 읽듯 해독한 내용을 살펴보자.
무늬를 따르기 전에 요청을 미리 보자.
무늬는 추천하지 않는다
스캐너는 패턴을 데이터로 해독하고 열거나 실행하라고 제안할 수 있다. 목적지를 인코딩했다고 소유자나 작업의 적절성이 증명되지는 않는다. 메뉴, 포스터, 소포의 코드가 정상일 수 있지만 주변 장소만으로 붙인 사람의 신원을 인증할 수 없다.
기존 코드 위에 스티커를 붙이거나 공식 안내처럼 보이는 메시지를 만들 수 있다. 모든 코드를 의심할 필요는 없다. 무엇을 해독했는지, 행동이 어디로 이어지는지, 발견한 맥락에 맞는 요청인지 나누어 생각하면 된다.
네 가지 무해한 내용
실제 코드를 만들거나 스캔하지 않고 가상 문자열 네 개를 분석했다. example.com 메뉴 HTTPS 주소, 쿼리에 example.com 주소를 포함한 example.org 주소, mailto 문자열, 가상 Wi-Fi 설정이다. 표지의 추상 무늬는 의도적으로 스캔할 수 없다.
첫 호스트는 example.com, 두 번째는 여전히 example.org다. 쿼리의 익숙한 주소가 바깥 목적지를 바꾸지 않는다. 이메일 문자열은 메일 작업을, Wi-Fi 문자열은 HTTPS가 아닌 설정을 제안한다. 네 검사로 구분했으며 페이지 열기, 메일 작성, 네트워크 연결은 하지 않았다.

미리보기가 전부는 아니다
많은 스캐너가 열기 전 목적지를 보여 준다. 반사적으로 누르지 말고 읽자. 짧은 링크나 리디렉션은 첫 요청 뒤 다른 곳으로 갈 수 있으므로 미리보기는 잠깐의 점검이지 전체 경로 설명은 아니다. 로그인이나 결제를 요구하면 낯선 도메인을 더 주의해서 본다.
메뉴를 보려는데 즉시 소프트웨어 설치나 민감 정보를 요구한다면 다시 확인할 이유가 된다. 맥락 불일치만으로 악의를 증명하지는 않지만 멈출 근거는 된다. 알려진 웹사이트로 찾거나 직원에게 직접 물을 수도 있다.
다른 경로로 확인하기
쓰던 서비스의 안내라면 평소 앱이나 저장한 북마크에서 같은 문제가 있는지 확인한다. 실제 장소에서는 직원이나 검증한 공식 정보와 비교한다. 의심스러운 스티커나 메시지에만 있는 전화번호에 의존하지 않는다.
Wi-Fi 내용은 해당 네트워크에 접속할지 따로 결정해야 한다. 식당 페이지를 여는 것과 달리 트래픽이 지나는 네트워크에 영향을 준다. 이메일 작업은 보내기 전 수신자와 내용을 확인한다. 모든 스캔을 무해한 웹 조회로 여기지 말고 행동 종류를 알아보자.

실제로 한 일에 맞게 대응하기
스캔, 페이지 열기, 비밀번호 제출, 결제 승인은 서로 다르다. 예상 밖 페이지에 도착만 했다면 조작을 멈추고 닫는다. 비밀을 입력했다면 별도로 접속한 서비스에서 바꾸고 세션을 살핀다. 돈이 관련됐다면 확인한 연락처로 결제 제공자에게 신속히 문의한다.
예시는 예약 도메인과 명백한 가상 네트워크 값만 사용한다. 목적지를 숨기는 방법이나 특정 스캐너의 안전성을 평가하지 않는다. 편리함과 약속 사이의 짧은 선택 시간을 남기는 것이 목적이다. 타이핑을 줄여도 신뢰 판단까지 맡길 필요는 없다.
더 읽어 보기
FTC: QR codes can hide harmful links ↗IANA: Example domains ↗Python: URL parsing ↗공식 문서와 함께 읽으면 좋은 자료입니다.
