- Là thư viện Python tự động phát hiện che đen không đúng cách trong tài liệu PDF, nhận diện các trường hợp văn bản chỉ bị phủ bởi hình chữ nhật màu đen
- Được Free Law Project phát triển để giải quyết một vấn đề lặp đi lặp lại được phát hiện trong quá trình thu thập hàng triệu tệp PDF
- Có thể chạy từ dòng lệnh hoặc trong mã Python, và trả kết quả dưới dạng JSON hoặc đối tượng Python
- Bên trong sử dụng PyMuPDF để phân tích hình chữ nhật, văn bản và thông tin màu sắc của PDF nhằm xác định việc che đen có thực sự ẩn văn bản hay không
- Có giá trị cao như một công cụ kiểm chứng tự động nhằm ngăn lộ thông tin cá nhân trong tài liệu pháp lý hoặc tài liệu công khai
Tổng quan
x-ray là thư viện Python dùng để phát hiện che đen (redaction) sai cách trong tệp PDF
- Khi người dùng nhập đường dẫn PDF, công cụ sẽ tìm các vùng mà việc che đen chưa được thực hiện đúng
- Kết quả được xuất ra dưới dạng JSON theo từng trang, bao gồm tọa độ (
bbox) và văn bản (text) của vùng đó
Bối cảnh phát triển
- Free Law Project đã phát hiện nhiều tài liệu che đen không đúng cách trong quá trình thu thập hàng triệu tệp PDF
- Một số người dùng không xóa văn bản mà dùng cách phủ bằng hình chữ nhật màu đen hoặc tô sáng
- Trong trường hợp này, nếu chọn phần văn bản bên dưới hình chữ nhật thì nội dung gốc vẫn bị lộ nguyên vẹn
- Để xác định mức độ phổ biến của vấn đề này, công cụ
x-ray đã được tạo ra
Cách sử dụng
- Cài đặt
- Có thể cài bằng lệnh
pip install x-ray hoặc uv add x-ray
- Chạy từ dòng lệnh
- Chạy theo dạng
xray path/to/file.pdf để nhận kết quả JSON
- Khi nhập URL, công cụ sẽ tải PDF từ xa rồi tiến hành kiểm tra
- Để kiểm tra nhiều URL cùng lúc, dùng
xargs -n 1 xray < urls.txt
- Dùng trong mã Python
- Gọi
xray.inspect("file.pdf") để nhận kết quả dưới dạng đối tượng Python
- Nếu giá trị đầu vào là chuỗi thì được xử lý là tệp cục bộ, nếu bắt đầu bằng
https:// thì là URL, còn bytes thì được xử lý là PDF trong bộ nhớ
- Nếu truyền đường dẫn tệp dưới kiểu
bytes thì sẽ không hoạt động
Nguyên lý hoạt động
- Bên trong, công cụ phân tích PDF bằng PyMuPDF
- Tìm các hình chữ nhật (rectangle) trong PDF
- Tìm các ký tự (letter) ở cùng vị trí
- Kết xuất hình chữ nhật thành ảnh
- Nếu hình chữ nhật được tô bằng một màu duy nhất, công cụ sẽ đánh giá đó là che đen sai cách
- Do cấu trúc PDF phức tạp nên rất khó phát hiện hoàn hảo, nhưng dự án vẫn đang được cải tiến liên tục
- Dự án được duy trì bằng quyên góp và tài trợ
Đóng góp và phát hành
- Có thể xem các trường hợp chưa được hỗ trợ hoặc yêu cầu cải tiến thông qua danh sách issues trên GitHub
- Trước khi đóng góp lần đầu, cần ký Contributor License Agreement (CLA)
- Việc phát hành được tự động hóa thông qua GitHub Actions, và khi phát hành thủ công có thể dùng lệnh
poetry publish --build
Giấy phép
- Được phát hành theo giấy phép BSD, có thể tự do tích hợp vào các dự án khác
- Hoan nghênh Pull Request và đề xuất tính năng, có thể chỉnh sửa trực tiếp trên giao diện web GitHub
1 bình luận
Ý kiến trên Hacker News
Khi làm việc tại Free Law Project, tôi đã tham gia nhiều dự án phức tạp kéo dài nhiều năm, nhưng dự án X-ray này là trường hợp gây tiếng vang nhất
Chúng tôi tạo ra X-ray để phân tích hàng triệu tài liệu trên CourtListener, đồng thời nhằm giúp mọi người nhận thức được vấn đề này
Chúng tôi đã phân tích hàng triệu tài liệu chỉ trong vài phút bằng một S3 batch job, nhưng phần thực sự khó là tổng hợp kết quả và báo cáo thì vẫn còn ở phía trước
Tôi cũng tò mò không biết X-ray có tận dụng kiểu rò rỉ font metrics này hay không
Ví dụ, oioioi và oooiii có độ rộng khác nhau tùy font
Hôm nay tôi mới xem khoảng 10% số file được công bố, nhưng chẳng hạn
EFTA00037069.pdfcó con trỏ/Prev, nghĩa là phiên bản trước đó vẫn được nhúng bên trong PDFĐây chỉ là một chỉnh sửa nhỏ, nhưng rất có thể các file khác cũng gặp tình trạng tương tự
Có thể tự kiểm tra bằng lệnh
qpdf --show-object=trailerTôi nghĩ kiểu biên tập cẩu thả này có thể là cố ý chứ không chỉ là sai sót
Bản gốc vốn đã là tài liệu được làm phẳng hoàn toàn
Càng nghĩ tôi càng thấy thông tin kerning của font có thể là một điểm yếu lớn của redaction
Chỉ từ vị trí của văn bản quanh hộp đen cũng có thể suy ra độ dài và hình dạng của từ bị che
Nếu biết thuật toán render, có lẽ còn có thể brute-force để suy ra văn bản thật
Tôi tự hỏi liệu đã có ai nghiên cứu vấn đề này chưa
Theo cách đó, cùng một từ nhưng khoảng cách sẽ khác nhau giữa các tài liệu
Đây là một dạng tấn công side-channel, khá giống với vấn đề này
Nếu ngắn và theo ngữ cảnh chỉ có thể là “yes” hoặc “no” thì rất dễ đoán, nhưng tên riêng hoặc câu dài sẽ khó hơn nhiều
PDF vẫn bị dùng rất rộng rãi dù nó vẫn có quá nhiều khiếm khuyết nền tảng với tư cách là tài liệu số, điều này thật đáng tiếc
Đây là câu hỏi đơn giản, nhưng tôi muốn biết chính xác mục đích của redaction trong những đợt công bố tài liệu như thế này là gì
Tôi cũng không hiểu vì sao phải duy trì tính ẩn danh
(Chỉnh sửa) Nghĩ đến việc có thể có cả những người vô tội bị liên quan thì tôi hiểu hơn
Việc che vì lý do tổn hại danh tiếng hay chính trị là bị cấm
Nhưng có nhiều lo ngại rằng việc redaction trên thực tế không tuân thủ tiêu chuẩn này
Ví dụ như công bố tọa độ GPS có thể làm phát sinh nguy cơ bị ném bom
Việc truy cứu trách nhiệm mới là điều quan trọng hơn
Nhưng vụ việc lần này quá quan trọng nên việc công khai là điều không thể tránh khỏi
Khi công bố PDF đã redacted, có vẻ quy trình cơ bản phải là vẽ hình chữ nhật màu đen rồi raster hóa thành ảnh 🤷
Chỉ phủ một hộp đen lên trên không có nghĩa là dữ liệu đã biến mất
Tôi thường xuyên thấy kiểu ngộ nhận này trong môi trường compliance
Nếu dùng Adobe Pro đúng cách thì có thể xóa vĩnh viễn nội dung (redact) khỏi PDF
Sự việc lần này chỉ là một sai lầm nghiệp dư do không biết dùng đúng trình chỉnh sửa PDF
Đây là hậu quả của việc bỏ qua quy trình mà hàng nghìn luật sư và chuyên viên pháp lý đã dùng suốt hàng chục năm
Trước đây người ta hay kẻ vạch đen trên giấy rồi dùng bản in làm bản cuối cùng, nên có lẽ họ đã làm việc với tư duy từ thời đó
Vì không thể chọn văn bản nên họ tưởng rằng nội dung đã được che kín
Hoặc cũng có thể họ cố tình làm theo cách này rồi giả vờ đó là nhầm lẫn
Vì vậy nhiều người cho rằng đây không phải lỗi vô ý đơn thuần mà là một kiểu malicious compliance có chủ đích
Điều đáng ngạc nhiên là ngay cả trình xem PDF trong trình duyệt cũng hiển thị được thông tin đã redacted
Mở tài liệu này trong Brave (Linux), rồi sao chép dòng đầu của đoạn 90, bạn sẽ thấy văn bản bị che vẫn được dán nguyên vẹn
Thật thú vị khi thấy khái niệm ediscovery (công bố chứng cứ điện tử) đang lan tới cả công chúng phổ thông
Người trong ngành công nghệ sẽ ngạc nhiên nếu biết những người ngoài kỹ thuật mù công nghệ đến mức nào
Điều đó làm tôi nhớ lại thời mà bộ phận IT trong công ty từng được xem như vị thần toàn năng