SaveSaveSaveSave ← Tất cả hướng dẫn
Tiếng Việt

Hướng dẫn · Rủi ro tin nhắn · · tác giả Stefan Tsezarov · cập nhật

Văn bản bạn không nhìn thấy

Hai tin nhắn có thể trông giống hệt nhau nhưng chứa những ký tự hoàn toàn khác.

Bạn sao chép một tin nhắn.

Nó trông bình thường.

Ba câu bình thường. Không có gì lạ.

Bạn dán nó vào một tài liệu, một trang web, một ví hoặc một trợ lý AI.

Và đột nhiên một điều xảy ra mà tin nhắn, như bạn đã thấy, dường như chưa bao giờ nói.

Bằng cách nào?

Vì những gì bạn thấy trên màn hình không nhất thiết là tất cả những gì có trong văn bản.

Một số ký tự hoàn toàn không chiếm khoảng trống nhìn thấy được.

Chúng vẫn ở đó.

Chúng vẫn có thể được sao chép, dán, lưu trữ và xử lý.

Chỉ là bạn không nhìn thấy chúng.


Máy tính không nhìn chữ cái theo cách bạn nhìn

Khi bạn nhìn một câu, bạn thấy các hình dạng.

Máy tính của bạn thấy dữ liệu.

Ví dụ, chữ A được biểu diễn bằng một ký tự Unicode có một code point cụ thể. Dấu cách là một ký tự khác. Mỗi chữ cái, chữ số, dấu câu và nhiều ký hiệu khác đều có cách biểu diễn riêng.

Nhưng không phải ký tự nào cũng tạo ra hình dạng nhìn thấy được.

Một số ký tự cho phần mềm biết văn bản nên hoạt động thế nào.

Chúng có thể bảo một chương trình:

Vì vậy bạn có thể có hai đoạn văn bản trông giống hệt nhau nhưng là hai chuỗi ký tự khác nhau.

Sự khác biệt đó có thể quan trọng.

Rất quan trọng.

Ba loại văn bản vô hình đáng biết

Có nhiều cơ chế khác nhau liên quan, nhưng ba cơ chế đặc biệt hữu ích để hiểu.

1. Ký tự không hiển thị

Chúng thường được gọi là ký tự độ rộng bằng không.

Ví dụ gồm zero-width space, zero-width joiner và word joiner.

Chúng chiếm một vị trí trong văn bản nhưng không tạo ra điểm ảnh nhìn thấy được.

Ví dụ, hai từ này có thể trông giống hệt nhau:

Hai từ · một trong số chúng không như vẻ ngoài

payment

pay​ment

từ thứ nhất: 7 ký tựtừ thứ hai: 8 ký tự

Có một ký tự vô hình bên trong từ thứ hai.

Có lẽ bạn không nhìn thấy nó.

Máy tính của bạn thì thấy.

Điều đó có nghĩa là hai chuỗi thực ra không giống hệt nhau.

Điều này có thể ảnh hưởng đến tìm kiếm, bộ lọc, tên người dùng, mã định danh và các hệ thống khác so sánh ký tự bên dưới thay vì những gì con người nhìn thấy.

Và có một lý do chính đáng để một số ký tự này tồn tại.

Chúng ta sẽ quay lại điều đó.

2. Ký tự thay đổi thứ tự bạn nhìn thấy

Một số ký tự vô hình ảnh hưởng đến hướng văn bản.

Điều này cần thiết vì các ngôn ngữ như tiếng Ả Rập và tiếng Do Thái được viết từ phải sang trái, trong khi tiếng Anh viết từ trái sang phải.

Một câu chứa cả hai có thể cần chỉ dẫn cho phần mềm biết các phần khác nhau nên được hiển thị thế nào.

Những chỉ dẫn đó có thể hữu ích.

Nhưng chúng cũng có thể bị lạm dụng.

Một ký tự điều khiển hướng có thể khiến các ký tự mà máy tính lưu trữ hiển thị theo thứ tự khác trên màn hình.

Điều đó tạo ra một vấn đề bảo mật rõ ràng.

Ví dụ, một tên tệp có thể trông như kết thúc bằng một phần mở rộng trong khi chuỗi ký tự bên dưới lại nói điều khác.

Cùng nguyên tắc đó có thể quan trọng trong mã nguồn.

Người duyệt mã thấy một thứ.

Máy tính xử lý thứ khác.

3. Ký tự có thể mang một thông điệp vô hình

Đây là loại khác thường.

Unicode có một dải gọi là khối Tags.

Những ký tự này được thiết kế cho mục đích gắn thẻ và thường vô hình khi hiển thị.

Điều thú vị là từng ký tự tag có thể đại diện cho các ký tự ASCII thông thường.

Ghép đủ nhiều lại với nhau, chúng có thể mã hóa văn bản.

Vì vậy một câu có thể chứa thêm một chuỗi ký tự không hiện trên màn hình.

Với mắt bạn, tin nhắn có thể trông như một lời chào hoàn toàn bình thường.

Với phần mềm đọc các ký tự bên dưới, có thể có nhiều thứ hơn thế.

Và sự khác biệt đó trở nên đặc biệt đáng chú ý khi đích đến là một trợ lý AI.

AI không nhìn tin nhắn của bạn như một bức ảnh chụp màn hình.

Nó xử lý các ký tự.

Vì vậy thứ bạn không nhìn thấy vẫn có thể là một phần của dữ liệu đầu vào.

Đây là hình dạng của nó

Hãy xem câu này:

Send the payment to the address below.

Trông bình thường, phải không?

Giờ hãy tưởng tượng các ký tự vô hình đã được chèn vào nó.

Trên màn hình của bạn, nó vẫn có thể trông như thế này — và đây là bản thật, được chuẩn bị để bạn thử:

Một ví dụ chuẩn bị sẵn · chọn, sao chép, quét

Send the​ payment⁠ to the​ address below.󠁨󠁩󠁤󠁤󠁥󠁮

ký tự nhìn thấy: 38ký tự thực tế: 47chênh lệch: 9

Nhưng bên dưới, máy tính có thể thực sự đang giữ thêm các ký tự.

Ví dụ:

Cùng một câu, được mô tả

Những gì bạn thấy:

Send the payment to the address below.

Những gì máy tính nhận:

Send the vô hình payment vô hình … TAGS

Câu nhìn thấy không thay đổi.

Chuỗi bên dưới thì có.

Đó là ý tưởng quan trọng.

Cùng vẻ ngoài. Dữ liệu khác.

Nếu bạn chạy ví dụ được chuẩn bị đặc biệt qua một trình quét, trình quét có thể nhận ra những ký tự đó dù mắt bạn không thể.

Gõ lại câu nhìn thấy bằng tay và những ký tự ẩn đó sẽ không đi theo.

Đó là toàn bộ mánh khóe.

Chữ cái không phải là chữ cái đó

Ký tự vô hình không phải vấn đề duy nhất.

Đôi khi ký tự hoàn toàn nhìn thấy được.

Chỉ là nó không phải ký tự bạn nghĩ.

Hãy xem hai chuỗi này:

Cùng hình dạng · ký tự khác nhau

savesavesave

sаvesavesave

chuỗi thứ hai, ký tự thứ 2: Kirin U+0430không phải Latinh U+0061

Chúng trông gần như không thể phân biệt.

Nhưng hãy nhìn kỹ chuỗi thứ hai.

Ký tự thứ hai không phải chữ a Latinh.

Đó là chữ Kirin а.

Chúng trông giống nhau.

Chúng là những ký tự khác nhau.

Kỹ thuật đó được gọi là tấn công homoglyph.

Cùng ý tưởng đó có thể dùng với tên người dùng, tên miền, tên token và các mã định danh khác.

Một tài khoản giả có thể dùng ký tự trông giống nhau.

Một trang web giả có thể dùng tên miền trông giống nhau.

Với con người, cái tên có thể trông quen thuộc.

Với máy tính, đó là một chuỗi hoàn toàn khác.

Điều này thực sự có thể gây vấn đề ở đâu?

Đây không chỉ là một mánh Unicode kỳ lạ.

Nó quan trọng ở bất cứ đâu văn bản được sao chép, so sánh hay được dùng để hành động.

Trợ lý AI

Bạn dán một tin nhắn vào trợ lý AI.

Bạn thấy một câu hỏi.

Văn bản bên dưới có thể chứa những ký tự bạn không nhìn thấy.

Vì trợ lý xử lý văn bản thật, không chỉ vẻ ngoài, những ký tự đó trở thành một phần của dữ liệu đầu vào.

Đó là lý do việc kiểm tra ký tự vô hình có thể hữu ích trước khi dán văn bản không đáng tin vào một hệ thống có thể hành động hoặc xử lý thông tin nhạy cảm.

Tên người dùng và tên tài khoản

Hai tài khoản có thể trông như cùng tên trong khi chứa các ký tự khác nhau.

Điều đó có thể khiến việc mạo danh khó nhận ra hơn nhiều.

Liên kết và tên miền

Một liên kết có thể chứa những ký tự giống các chữ cái quen thuộc.

Cái tên bạn nhận ra không nhất thiết là chính xác tên miền bạn nghĩ.

Mã nguồn

Ký tự điều khiển hướng và các ký tự Unicode bất thường khác có thể khiến mã nguồn khó duyệt đúng hơn.

Lập trình viên thấy văn bản được hiển thị.

Trình biên dịch thấy các ký tự thật.

Tìm kiếm và lọc

Một bộ lọc thường so sánh các chuỗi.

Chèn một ký tự vô hình và chuỗi thay đổi.

Điều đó có thể ảnh hưởng đến tìm kiếm, danh sách chặn, hệ thống kiểm duyệt và các công cụ xử lý văn bản khác.

Bạn có thể kiểm tra bằng cách nào?

Bạn không cần trở thành chuyên gia Unicode.

Có vài bước kiểm tra đơn giản.

KIỂM TRA 1 — Quét văn bản

Dán văn bản đáng ngờ vào một trình quét bảo mật ký tự.

Một trình quét hữu ích nên cho bạn biết:

Đó là những gì trình quét trên trang này được thiết kế để hiển thị.

Điều quan trọng là nó nên cho bạn biết nó thực sự tìm thấy gì, thay vì chỉ đưa cho bạn một đèn xanh hay đỏ bí ẩn.

KIỂM TRA 2 — So sánh số ký tự

Đây là một bước kiểm tra nhanh.

Nếu một câu có vẻ chứa 38 ký tự nhưng công cụ đếm ký tự báo 47, bạn có một sự chênh lệch đáng tìm hiểu.

Số ký tự sẽ không cho bạn biết các ký tự thừa là gì.

Nhưng nó có thể cho bạn biết có thứ gì đó ở đó mà bạn không nhìn thấy.

KIỂM TRA 3 — Gõ lại văn bản khi phù hợp

Nếu ai đó gửi cho bạn một chỉ dẫn ngắn và bạn không cần giữ định dạng gốc, tự gõ lại phần quan trọng có thể loại bỏ ký tự vô hình khỏi văn bản đã sao chép.

Nhưng hãy nhớ:

Gõ lại không làm đích đến trở nên đáng tin.

Ví dụ, nếu ai đó gửi cho bạn một địa chỉ trang web đáng ngờ, tự gõ nó không chứng minh bản thân trang web là hợp pháp.

Đó chỉ là một cách tránh ký tự ẩn trong văn bản bạn sao chép.

KIỂM TRA 4 — Đọc tên miền thật

Đừng chỉ dựa vào việc nhận ra vẻ ngoài của một tên miền.

Nếu một liên kết quan trọng, hãy kiểm tra tên miền thật.

Với các tài khoản quan trọng, hãy dùng bookmark bạn đã lưu hoặc tự gõ địa chỉ đã biết thay vì mở một liên kết bất ngờ.

Cùng nguyên tắc áp dụng cho tên người dùng và địa chỉ ví:

nhận ra hình dạng không giống với xác minh các ký tự.

Đừng hoảng sợ khi bạn tìm thấy một ký tự vô hình

Điều này quan trọng.

Vô hình không tự động có nghĩa là độc hại.

Một số ký tự Unicode vô hình tồn tại vì người ta thực sự cần chúng.

Ví dụ, zero-width joiner có thể ảnh hưởng đến cách các ký tự nối với nhau trong nhiều hệ chữ viết.

Chúng cũng được dùng trong các chuỗi emoji.

Ký tự điều khiển hướng cần thiết để hiển thị đúng văn bản trộn lẫn chữ viết từ trái sang phải và từ phải sang trái.

Vì vậy tìm thấy một ký tự vô hình không tự động có nghĩa là:

“Đây là một cuộc tấn công.”

Nó có nghĩa là:

Có thứ gì đó ở đây mà tôi không nhìn thấy.

Điều đó có nghĩa là gì tùy thuộc vào bối cảnh.

Ai đã gửi văn bản?

Văn bản yêu cầu bạn làm gì?

Bạn sắp dán nó vào đâu?

Nó sẽ đi vào một trợ lý AI, một ví, một trang web, một terminal hay một hệ thống nào khác sẽ hành động theo nó?

Những câu hỏi đó quan trọng.

Khối Tags đáng được chú ý thêm

Ký tự Tags khác thường vì mục đích của chúng là biểu diễn thông tin trong khi vẫn vô hình khi văn bản hiển thị bình thường.

Nếu một người lạ gửi cho bạn một tin nhắn chứa một chuỗi bất ngờ các ký tự này, điều đó đáng tìm hiểu.

Trình quét có thể cho thấy các ký tự đó tồn tại và, khi phù hợp, giải mã văn bản mà chúng biểu diễn.

Nhưng ngay cả khi đó, việc phát hiện không cho bạn biết ý định của người gửi.

Nó cho bạn biết những gì có trong văn bản.

Đó là một câu trả lời hữu ích và có cơ sở hơn nhiều.

Một lần quét sạch cho biết — và không cho biết — điều gì

Đây là một chỗ khác mà công cụ bảo mật cần trung thực.

Trình quét phát hiện ký tự.

Nó không đọc được suy nghĩ của con người.

Nếu trình quét tìm thấy ký tự vô hình, nó có thể cho bạn biết đó là những ký tự gì.

Nó không thể cho bạn biết ai đã chèn chúng.

Nó không thể chứng minh vì sao chúng được chèn vào.

Và nếu nó không tìm thấy gì, điều đó không có nghĩa là bản thân tin nhắn đáng tin.

Một câu trông hoàn toàn bình thường vẫn có thể chứa một lời nói dối, một liên kết độc hại hay một chỉ thị nguy hiểm.

Tương tự, một tin nhắn chứa ký tự vô hình có thể hoàn toàn vô hại.

Việc phát hiện homoglyph tự động cũng có giới hạn. Trình quét có thể kiểm tra các ký tự trông giống nhau đã biết và các bộ ký tự đã biết, nhưng không bước kiểm tra đơn lẻ nào nên được coi là bảo đảm rằng mọi trò đánh lừa thị giác có thể có đều đã được tìm ra.

Kết quả cho bạn biết những gì đã được phát hiện.

Bạn vẫn phải quyết định văn bản có nghĩa là gì và bạn có tin nguồn của nó hay không.

Thói quen đơn giản đáng xây dựng

Bạn không cần sợ việc sao chép và dán.

Chỉ cần chậm lại khi văn bản bạn đang sao chép sắp khiến điều gì đó xảy ra.

Một trợ lý AI.

Một ví.

Một trang web.

Một dòng lệnh.

Một tài khoản.

Một giao dịch tài chính.

Một đoạn mã.

Nếu bạn không tự gõ văn bản, bạn không nhất thiết biết mọi thứ có bên trong nó.

Và bạn không phải đoán.

Hãy kiểm tra các ký tự trước khi để chúng hành động.

Chỉ mất vài giây.

Và trong nhiều trường hợp, việc kiểm tra là miễn phí.


Bài viết này chỉ nhằm mục đích giáo dục. Nó giải thích cách ký tự Unicode vô hình, ký tự điều khiển hướng văn bản và ký tự trông giống nhau có thể ảnh hưởng đến văn bản số. Ví dụ trên trang này chứa các ký tự vô hình được cố ý chèn vào để bạn tự xem xét cơ chế. Văn bản ẩn vô hại và chỉ tồn tại cho mục đích minh họa.

Ký tự vô hình vẫn còn khi sao chép và dán, nên trình quét đều thấy chúng. Để khỏi phải dán, hãy dùng bookmark quét văn bản được chọn.