X-ray, library Python untuk mendeteksi penyensoran PDF yang salah
(github.com/freelawproject)- Library Python untuk secara otomatis menemukan penyensoran yang tidak tepat pada dokumen PDF, dengan mengidentifikasi kasus ketika teks hanya ditutupi persegi panjang hitam
- Dikembangkan oleh Free Law Project untuk mengatasi masalah berulang yang ditemukan saat mengumpulkan jutaan PDF
- Dapat dijalankan dari baris perintah atau kode Python, dan mengembalikan hasil dalam bentuk JSON atau objek Python
- Secara internal menggunakan PyMuPDF untuk menganalisis persegi panjang, teks, dan informasi warna pada PDF guna menentukan apakah penyensoran benar-benar menyembunyikan teks
- Sangat bernilai sebagai alat verifikasi otomatis untuk mencegah kebocoran informasi pribadi pada dokumen hukum atau materi publik
Gambaran umum
x-rayadalah library Python untuk mendeteksi redaction yang salah di dalam file PDF- Saat pengguna memasukkan path PDF, alat ini menemukan area yang penyensorannya tidak dilakukan dengan benar
- Hasilnya dikeluarkan dalam format JSON per halaman, mencakup koordinat (
bbox) dan teks (text) pada area tersebut
Latar belakang pengembangan
- Free Law Project menemukan banyak dokumen dengan penyensoran yang tidak dilakukan dengan benar saat mengumpulkan jutaan PDF
- Sebagian pengguna menutupi teks dengan persegi panjang hitam atau highlight tanpa benar-benar menghapus teksnya
- Dalam kasus ini, saat teks di bawah persegi panjang dipilih, isi aslinya tetap terlihat
- Untuk memahami seberapa sering masalah ini terjadi, alat
x-raydibuat
Cara penggunaan
- Instalasi
- Dapat diinstal dengan perintah
pip install x-rayatauuv add x-ray
- Dapat diinstal dengan perintah
- Menjalankan dari baris perintah
- Jalankan dalam bentuk
xray path/to/file.pdfuntuk menghasilkan keluaran JSON - Jika URL dimasukkan, PDF jarak jauh akan diunduh lalu diperiksa
- Untuk memeriksa beberapa URL sekaligus, gunakan
xargs -n 1 xray < urls.txt
- Jalankan dalam bentuk
- Penggunaan dalam kode Python
- Memanggil
xray.inspect("file.pdf")akan mengembalikan hasil sebagai objek Python - Jika nilai masukan berupa string, diperlakukan sebagai file lokal; jika diawali
https://, diperlakukan sebagai URL; jikabytes, diperlakukan sebagai PDF di memori - Jika path file diberikan sebagai tipe
bytes, itu tidak akan berfungsi
- Memanggil
Cara kerja
- Secara internal menganalisis PDF menggunakan PyMuPDF
- Mencari rectangle di dalam PDF
- Mencari letter pada posisi yang sama
- Merender persegi panjang sebagai gambar
- Jika persegi panjang terisi satu warna, maka dianggap sebagai penyensoran yang salah
- Karena struktur PDF kompleks, deteksi yang sempurna sulit dilakukan, tetapi perbaikan terus berlanjut
- Proyek ini dipelihara melalui donasi dan sponsor
Kontribusi dan rilis
- Daftar issues di GitHub dapat digunakan untuk memeriksa kasus yang belum didukung atau permintaan perbaikan
- Sebelum kontribusi pertama, perlu menandatangani Contributor License Agreement (CLA)
- Rilis diotomatisasi melalui GitHub Actions, dan untuk rilis manual gunakan perintah
poetry publish --build
Lisensi
- Dirilis dengan lisensi BSD, sehingga dapat diintegrasikan secara bebas ke proyek lain
- Pull Request dan usulan fitur disambut, dan perubahan juga dapat dilakukan langsung melalui antarmuka web GitHub
1 komentar
Komentar Hacker News
Saat bekerja di Free Law Project, kami menangani banyak proyek kompleks yang berlangsung bertahun-tahun, tetapi proyek X-ray ini adalah kasus yang paling ramai dibicarakan
X-ray dibuat untuk menganalisis jutaan dokumen di CourtListener, sekaligus untuk menyadarkan orang akan masalah ini
Kami menganalisis jutaan dokumen dalam hitungan menit dengan S3 batch job, tetapi bagian yang benar-benar sulit yaitu merapikan hasil dan melaporkannya masih tersisa
Saya juga penasaran apakah X-ray memanfaatkan kebocoran metrik font seperti ini
Misalnya, oioioi dan oooiii memiliki lebar yang berbeda tergantung fontnya
Saya baru melihat sekitar 10% dari file yang dirilis hari ini, dan misalnya
EFTA00037069.pdfmemiliki pointer/Prev, jadi versi sebelumnya ikut tertanam di dalam PDFIni memang revisi kecil, tetapi kemungkinan besar file lain juga mengandung hal serupa
Ini bisa diperiksa langsung dengan perintah
qpdf --show-object=trailerSaya rasa pengeditan yang berantakan seperti ini mungkin bukan sekadar kesalahan, melainkan disengaja
Dokumen aslinya sudah merupakan dokumen yang sepenuhnya di-flatten
Semakin dipikirkan, informasi kerning font tampaknya bisa menjadi kelemahan besar dalam redaction
Hanya dari posisi teks di sekitar kotak hitam, panjang dan bentuk kata yang disembunyikan bisa diperkirakan
Jika algoritme rendering-nya diketahui, mungkin saja teks aslinya bisa diduga lewat brute-force
Saya penasaran apakah ada yang pernah meneliti masalah ini
Jadi, bahkan untuk kata yang sama, jaraknya akan berbeda di tiap dokumen
Itu semacam serangan side-channel, dan mirip dengan masalah ini
Jika pendek dan secara konteks hanya mungkin “yes” atau “no”, menebaknya akan mudah, tetapi nama atau kalimat panjang jauh lebih sulit
Sangat disayangkan PDF masih begitu luas dipakai, padahal sebagai dokumen digital format ini tetap punya terlalu banyak cacat mendasar
Pertanyaan sederhana, tapi saya penasaran apa sebenarnya tujuan redaction dalam publikasi dokumen seperti ini
Saya juga tadinya tidak paham mengapa anonimitas harus dipertahankan
(Setelah diedit) masuk akal setelah memikirkan bahwa orang yang tidak bersalah juga bisa ikut tercantum
Menyunting demi mencegah kerusakan reputasi atau alasan politik itu dilarang
Namun ada kekhawatiran besar bahwa redaction yang dilakukan di lapangan tidak mengikuti standar ini
Misalnya, jika koordinat GPS yang dipublikasikan bisa memicu risiko pengeboman
Pertanggungjawaban dianggap lebih penting
Tetapi kasus kali ini terlalu penting sehingga publikasinya tak terelakkan
Saat merilis PDF yang sudah di-redact, rasanya prosedur dasarnya adalah menggambar kotak hitam lalu merasterkannya menjadi gambar 🤷
Menutupinya dengan kotak hitam saja tidak berarti datanya hilang
Di lingkungan compliance, saya sering melihat kesalahpahaman seperti ini
Jika Adobe Pro digunakan dengan benar, isi PDF bisa dihapus permanen (redact)
Kasus ini hanyalah kesalahan amatir karena tidak benar-benar paham menggunakan editor PDF
Ini akibat mengabaikan prosedur yang sudah dipakai ribuan pengacara dan staf hukum selama puluhan tahun
Dulu caranya adalah menarik garis hitam di atas kertas lalu memakai hasil cetaknya sebagai versi final, dan tampaknya pekerjaan ini dilakukan dengan pola pikir dari era itu
Karena pemilihan teks terblokir, mereka mungkin salah mengira isinya sudah tersembunyi
Atau bisa juga sengaja dibuat seperti ini lalu berpura-pura itu kesalahan
Karena itu, banyak yang melihat kejadian ini bukan sebagai kesalahan biasa, melainkan malicious compliance yang disengaja
Yang mengejutkan, informasi yang di-redact tetap terlihat bahkan di PDF viewer browser
Di Brave (Linux), buka dokumen ini, lalu salin baris pertama paragraf 90, maka teks yang ditutupi akan ikut tertempel apa adanya
Menarik melihat konsep ediscovery (pengungkapan bukti elektronik) mulai menyebar hingga ke masyarakat umum
Orang-orang di industri teknologi akan terkejut jika tahu betapa buta teknologinya banyak orang di bidang nonteknis
Ini mengingatkan pada masa ketika staf IT diperlakukan seperti dewa mahatahu di perusahaan