Mã QR thực sự chứa gì: Wi-Fi, vCard và đường link

Định dạng văn bản đằng sau mã QR Wi-Fi, danh bạ, link, e-mail và 2FA, cách máy quét nhận ra từng loại, và cách nhận biết link đáng ngờ trước khi mở.

Trong bài này

Đưa điện thoại vào một mã QR, máy sẽ gợi ý kết nối Wi-Fi, lưu danh bạ hoặc mở trang web. Có vẻ như mã QR "biết" nó là gì, nhưng thực ra không. Mã QR chỉ lưu một chuỗi ký tự. Điện thoại đọc chuỗi đó, nhìn phần mở đầu rồi đoán bạn muốn làm gì với nó. Bài này đi qua các định dạng văn bản đằng sau những loại mã phổ biến, cho thấy máy quét xử lý từng loại thế nào và chỉ ra những lỗi khiến mã vẫn quét được nhưng hoạt động sai.

Mọi ví dụ dưới đây đều đã được chạy qua bộ phân tích của công cụ quét mã QR trên trang. Công cụ đọc mã từ ảnh chụp, ảnh chụp màn hình hoặc camera và hiển thị nội dung giải mã trước khi mở bất cứ thứ gì.

Mã QR chỉ là văn bản

Các ô đen trắng mã hoá các byte, kèm phần sửa lỗi để mã vẫn đọc được khi bị xước hoặc có logo ở giữa. Sau khi sửa lỗi xong, máy quét trả về đúng một chuỗi văn bản. Nút "Kết nối mạng", bản xem trước danh bạ hay ghim bản đồ đều là cách máy quét diễn giải chuỗi đó.

Điều này dẫn tới hai hệ quả. Thứ nhất, bạn luôn xem được chính xác nội dung một mã nếu giải mã mà không thực hiện hành động. Thứ hai, loại mã được quyết định hoàn toàn bởi tiền tố như WIFI:, BEGIN:VCARD hay https://. Chỉ cần sai tiền tố hoặc dấu câu một chút, điện thoại sẽ coi mã Wi-Fi bạn chuẩn bị kỹ là một câu văn bất kỳ.

Mã Wi-Fi: WIFI:

Mã Wi-Fi là danh sách ngắn các cặp khoá:giá trị, ngăn cách bằng dấu chấm phẩy và kết thúc bằng hai dấu chấm phẩy:

WIFI:T:WPA;S:Cafe Sen;P:12345678;;

T là kiểu bảo mật (WPA, WEP hoặc nopass cho mạng mở), S là tên mạng (SSID), P là mật khẩu, còn H:true đánh dấu mạng ẩn. Thứ tự các cặp không quan trọng. Công cụ của chúng tôi đọc dòng trên thành SSID "Cafe Sen", bảo mật WPA, mật khẩu "12345678".

Cái bẫy nằm ở dấu câu bên trong giá trị. Dấu chấm phẩy kết thúc một trường, nên mật khẩu có chứa dấu này phải được thoát bằng dấu gạch chéo ngược; tương tự với :, ,, " và chính dấu gạch chéo ngược. Đây là cùng quán cà phê với mật khẩu hoa;sen:2024, viết theo hai cách:

WIFI:T:WPA;S:Cafe Sen;P:hoa\;sen\:2024;;
WIFI:T:WPA;S:Cafe Sen;P:hoa;sen:2024;;

Dòng đầu giải mã ra mật khẩu hoa;sen:2024. Dòng thứ hai cho ra mật khẩu hoa, vì dấu chấm phẩy đầu tiên đã kết thúc trường và sen:2024 bị coi là một khoá lạ. Mã quét rất ngon, điện thoại thử kết nối, rồi báo "sai mật khẩu" và ai cũng phải ra quầy hỏi. Một trình tạo mã tốt sẽ tự thoát các ký tự này; mã tự viết tay thì thường không.

Khi không có mật khẩu và không có kiểu bảo mật, như WIFI:S:Guest;;, mạng được coi là mạng mở. Máy quét sẽ cảnh báo, vì bất kỳ ai ở gần cũng có thể đọc lưu lượng trên mạng mở.

Danh thiếp: vCard và MECARD

Mã danh bạ thường chứa một vCard, cùng định dạng với tệp .vcf mà danh bạ điện thoại xuất ra:

BEGIN:VCARD
VERSION:3.0
N:Nguyen;An;;;
FN:Nguyen An
ORG:Sen Coffee
TEL;TYPE=CELL:+84 90 123 4567
EMAIL:[email protected]
END:VCARD

N là tên có cấu trúc (họ; tên; tên đệm; danh xưng; hậu tố), FN là tên hiển thị. Công cụ hiển thị vCard này thành tên "Nguyen An", tổ chức, số di động gắn nhãn cell cùng địa chỉ e-mail, và cho bạn lưu thành tệp .vcf.

Một số máy Android và trình tạo mã cũ dùng định dạng MECARD ngắn hơn: MECARD:N:Nguyen,An;TEL:+84901234567;EMAIL:[email protected];;. Lưu ý trường N của nó đặt họ trước, ngăn bằng dấu phẩy, nên máy quét đọc đúng sẽ hiển thị "An Nguyen".

vCard là loại nội dung dài nhất trong các loại phổ biến. Mỗi dòng thêm vào, một số điện thoại nữa, một địa chỉ, một ghi chú, đều làm mã dày đặc hơn và khó quét hơn khi in trên danh thiếp. Hãy chỉ giữ những gì người nhận thật sự cần ngay lúc đó.

Link là loại đơn giản nhất: toàn bộ URL chính là văn bản. Một máy quét cẩn thận sẽ tách link ra trước khi bạn mở. Với https://example.com/menu?table=12&lang=vi#drinks, công cụ hiển thị giao thức https, tên miền example.com, đường dẫn /menu, các tham số table = 12 và lang = vi, và phần neo drinks. Đọc tên miền là việc quan trọng nhất, vì tên miền quyết định ai nhận lượt truy cập của bạn.

Máy quét cảnh báo những mẫu hợp lệ nhưng hay bị lạm dụng:

Nội dungMáy quét cảnh báo gì
http://xn--pple-43d.com/loginkhông mã hoá (http), và tên miền punycode: tên xn-- có thể trông giống một thương hiệu quen khi trình duyệt hiển thị
https://user:[email protected]/admincó thông tin đăng nhập trong link, và dùng địa chỉ IP trần thay vì tên miền
javascript:alert(1)giao thức không an toàn; chỉ hiển thị dạng văn bản, không bao giờ được đưa thành link

Chuỗi www.example.com đứng một mình được hiểu là địa chỉ web và mở qua https. Văn bản thường không thuộc định dạng nào, như Table 12 - ask for the set menu, chỉ được hiển thị nguyên văn.

E-mail, SMS, điện thoại, vị trí và 2FA

Các định dạng phổ biến còn lại là các lược đồ URI:

  • mailto:[email protected]?subject=Order%2012&body=Hi soạn sẵn một e-mail với tiêu đề "Order 12". Dấu cách phải được mã hoá thành %20.
  • SMSTO:+84901234567:STOP soạn sẵn tin nhắn có nội dung "STOP". Nó không tự gửi, nhưng một mã như vậy trên poster có thể khiến bạn đăng ký dịch vụ nếu bấm gửi mà không đọc.
  • tel:+84901234567 gợi ý gọi tới một số.
  • geo:21.0285,105.8542?q=Hoan%20Kiem là vĩ độ, kinh độ kèm nhãn; công cụ đưa nó thành link bản đồ thay vì tự mở ứng dụng.
  • otpauth://totp/Example:[email protected]?secret=JBSWY3DPEHPK3PXP&issuer=Example là mã mà ứng dụng xác thực quét khi bạn bật đăng nhập hai lớp. secret là khoá sinh ra mọi mã sau này, nên máy quét mặc định che nó và cảnh báo. Hãy coi ảnh chụp mã này như một mật khẩu. Công cụ tạo mã TOTP giải thích khoá đó làm gì.

Những lỗi thường gặp

  1. Không thoát `;` hoặc `:` trong mật khẩu Wi-Fi. Mã vẫn quét được nhưng mật khẩu bị cắt ngắn mà không báo gì.
  2. Nội dung dài trên bản in nhỏ. Nội dung càng dài thì càng nhiều ô; mã dày in cỡ 2 cm thường không quét được trên camera cũ. Rút ngắn nội dung hoặc in to hơn.
  3. Tin tấm poster thay vì tin tên miền. Người ta có thể dán đè mã giả lên mã thật. Hãy đọc tên miền trước khi mở link, nhất là khi trang yêu cầu đăng nhập hoặc thanh toán.
  4. Chia sẻ mã thiết lập 2FA. Mã QR otpauth:// là bí mật, không phải tiện ích để gửi cho người khác.
  5. Mã sáng trên nền tối. Một số máy quét chỉ tìm ô tối trên nền sáng; công cụ của chúng tôi thử cả ảnh đảo màu, nhưng không phải điện thoại nào cũng làm vậy.

Nếu cần tạo mã thay vì đọc mã, công cụ tạo mã QR dựng sẵn nội dung Wi-Fi, danh bạ và link với các ký tự đã được thoát đúng. Còn vì sao những mã tĩnh như trên không bao giờ hết hạn, hãy đọc mã QR tĩnh và mã QR động.

Công cụ được nhắc trong bài

Về trang blog