Gizli barmaq izləri və onlardan necə qorunmaq olar.

Bu yazı bir blog yazısı, HN haqqında bir müzakirə və Chrome genişləndirməsindən ilhamlandı. Son nəticə zwBlocker: sıfır eni olan simvolların tanına biləcəyi bir uzantı.

Bu, əsas fikrə aiddir: adınızı (və ya e-poçt adresinizi, istifadəçi adınızı və s.) Görünmədən gizlətmək olar ki, sizi şəxsiyyət olaraq tanımaq üçün başqa yerdə kopyaladığınız və paylaşdığınız bir mətn parçasında, kim sərbəst buraxdı.

Bəli, bu xoşagəlməz bir görüntüdür - amma ədalətli olmaq üçün heç olmasa HTML kodu deyil.

Necə?

Tomın yazısı konsepsiyanı ətraflı təsvir edir, lakin əsas fikir sıfır enli Unicode simvollarından istifadə edir.

Yəni bir mətn parçasına sıfır geniş bir simvol daxil edərkən görünmür və mətnin qalan hissəsinə təsir göstərmir (ya da olmaya bilər). Bununla birlikdə, bu sıfır genişlikdəki simvolları kompüter oxuya bilər. Bu sıfır genişlikli simvollardan bir sıra istifadə etsək, görünməyən məlumatları mətnin istənilən hissəsinə kodlaşdıra bilərik - məsələn, bir e-poçt göndərildikdə - və sonra yenidən araşdırın. mətn sosial mediada görünəndə.

Bunun qarşısını almaq üçün nə edə bilərəm?

Ən bariz yanaşma: sadəcə mətnin ekran görüntüsünü götürün və keçirin. Bu şəkildə, sıfır genişlikdəki simvol oxunmayacaq və adlar bulanık ola bilər. Təəssüf ki, bu adınızı şifrələməyin yeganə yolu deyil. Niyə bu işə yaramır: HN istifadəçisi Boramalperin dediyi kimi, ligatures, kənarları, şriftləri, kerning və ya hətta sinonimi əvəzetmə kimi digər cəhətlər şəxsiyyətinizi şifrələmək üçün istifadə edilə bilər, hətta bir ekran görüntüsündən.

Daha yaxşı bir yanaşma: Gizli simvolları heç kopyalamayın!

Chpmrc Chrome uzantısı iş yerində.

İlk HN müzakirəsindən təxminən 12 saat sonra, istifadəçi chpmrc bunun üçün bir Chrome genişləndirməsi buraxdı! Bu olduqca asandır - mətndə gizli simvolların olduğundan şübhələnirsinizsə, Chrome genişlənməsini açın, düyməni vurun və bumu! Bütün sıfır genişlikdəki simvollar emojis ilə əvəz olunur.

Bir şeyin xaricində çox əladır: bunu etməyi heç xatırlamazdım! Mən də tək deyiləm.

Daha yaxşı bir həll

Bir çox təkliflər verildi, bunlar:

Çap olunmayan simvolları çıxarın və reklam blokerlərinin bloklanmış elanların sayını necə göstərdiyinə bənzər bir sıra simvolu göstərin. -kerkeslager
Panoya sıfır genişlikdəki simvol axtarın, diqqətsiz çıxarın və dəyişdirin. -Someone1234

və quru:

Vebi yalnız ASCII-də kod nöqtənizlə daxil edilmiş UTF-8 simvolları ilə oxuyun. Flash adam

Şəxsən mən hesab edirəm ki, simvolların avtomatik olaraq çıxarılması bəzi problemlərə səbəb ola bilər, xüsusən Emoji dəstəyi ilə, müəyyən emojilərin (dəri tonunun dəyişməsi və s.) Görünüşünü dəyişdirmək üçün sıfır genişlikdəki simvollardan istifadə edilə bilər.

İnsanların lövhələrini manipulyasiya etmək riskli bir manevr olduğunu düşünürəm - xüsusən insanlar qanuni səbəblərə görə sıfır genişlikdə işarələri kopyalamaq istədikdə. Söz yox ki, həyata keçirmək çətin olacaq.

Məncə, ideal həll bir uzantı olacaq:

1. Səssizcə reklam blokerlərinin neçə reklamın sökülmədən bloklandığını necə göstərdiyinə bənzər gizli simvol barədə xəbərdarlıq edir.

2. Gizli işarələrlə mətni seçdiyiniz zaman yüksək səslə xəbərdarlıq edir. Bu yolla, uzantını quraşdırmağı unutmağınıza baxmayaraq qorunursunuz.

İdeal həllini yaradın

"Ok, mövcud həllər tələblərimizə cavab vermirsə, nə edirik?" "Daha sərt görünürük, əlimizdə olanı edirik və ya imtina edirik!" "Xeyr! Bazar günü günortadan sonra (və bazar ertəsi gününün çoxu) cavabsız bir həll hazırlayırıq!"

Fəaliyyət baxımından, əlavə etməliyik:

  • Gəldiyimiz səhifələrin məzmununu oxuyun.
  • Ziyarət etdiyimiz səhifələrin məzmununu düzəldin.
  • Gerekirse pop-up istifadəçi interfeysi göstərin.

Xoşbəxtlikdən, əvvəllər qurduğum bir genişləndirmə bütün bunları edir: Squish böyük tvitləri qısaldır. Əvvəlki blog yazılarında Squish-in necə hazırladığım barədə oxuya bilərsiniz və bunun arxasında kodu github-da görə bilərsiniz.

Necə ...

Bu çox qısa olacaq - bunun necə edildiyi haqqında ətraflı bir yazı oxumaq istəsəniz, bir şərh buraxın.

Squish kodu ilə başlayaraq, bütün promo şəkilləri silirəm və yeni layihəmizə zəng etmək üçün readme.md və manifesti yeniləyirəm: zwBlocker: İstifadəçi sıfır enli Unicode simvollarını tapın və onlara bildirin.

manifest.json

Squish yalnız "twitter.com" da işləmişdir, buna görə təzə uzantılarımızın ziyarət etdiyimiz hər səhifəyə daxil olmasını təmin etmək üçün manifesti dəyişdirmək istəyirik. Məzmun Skriptləri daxilində "Uyğunluqlar" ı dəyişdirin:

"matçlar": [" "],

Səhifədə sıfır genişlikdəki simvol tapmaq üçün səhifə yükləndikdən sonra işləyən məzmun skriptindən istifadə edirik: "run_at": "document_end".

Bu əsəbi adamları tapmaq üçün DOM-dan keçin

ZWC üçün DOM axtarmaq üçün bir daraxtWalker istifadə edəcəyik. Maraqlı qovşaqları müəyyənləşdirmək üçün yaza biləcəyimiz bir filtr funksiyasını qəbul edən sənəd.createTreeWalker zavod metodu istifadə edərək yaradıldı. Filtr funksiyamız belə görünür:

contentScript.js
... funksiyası (node) {if (testForZeroWidthCharacters (node.nodeValue)) {totalCount ++; qayıt NodeFilter.FILTER_ACCEPT; } başqa {// FILTER_SKIP bu düyünün uşaqlarını nəzərə almalıdır. qayıt NodeFilter.FILTER_SKIP; }} ...

NodeFilter.FILTER_ACCEPT və FILTER_SKIP - ağacWalker-ə mövcud nodu daxil etməyi və ya onu atlamağı bildirən sabitdir. Cari node uşaqlarına məhəl qoymayacaq bir üçüncü FILTER_REJECT seçimi var. Uşaq mətn elementlərinin olmadığına əmin ola bilsək, bu da ağac axtarışını çox sürətləndirərdi.

totalCount neçə tapdığımızı izləmək üçün istifadə etdiyim qlobal dəyişəndir.

testForZeroWidthCharacters öz funksiyamdır ki, chpmrc kodundan çox asılıdır və bu kimi görünür:

contentScript.js
... var zwMatches = / [-] / g; Funksiya testForZeroWidthCharacters (text) {return text.match (zwMatches); } ...

ZwMatches müntəzəm ifadəsi funksiya xaricindədir, çünki zwC-ləri eyni normal ifadə ilə silmək və əvəz etmək üçün funksiyalar da yazdım. Mütəmadi ifadə g ilə başa çatır, yəni BÜTÜN baş verənlərə uyğun gələn qlobal müntəzəm bir ifadə deməkdir və nəinki ilk. Zwc çıxarmaq və dəyişdirmək üçün olduqca vacibdir!

Seçilmiş mətni ələ keçirin

Bilmirdim, amma istifadəçi səhifədəki mətni vurğulayaraq hər dəfə izləmək üçün document.onselectionchange istifadə edə biləcəyiniz məlum oldu. Seleksiyon.toString () ilə bütün mümkün ZWC-lər daxil olmaqla mətni aldım, sonra regex funksiyama keçib istifadəçini xəbərdar etmək üçün arxiv skriptinə göndərə bildim. Asan!

// seçilmiş mətni tutub arxa səhifəyə mesaj göndərin document.onselectionchange = funksiya () {var seçim = document.getSelection (); if (testForZeroWidthChar simvolları (seçim.toString ())) {chrome.storage.sync.set ({seçilmişMövzu: seçim.toString (), seçilmişTextClean: removeZeroWidthCharacters (Selection.toString ()), seçilmişTextEmoji: əvəz ZeroWidthSarkrords (seçim) ,}, Funksiya () {}); / * göstər mesajı * / chrome.runtime.sendMessage ({mesaj: "warnUserOfZeroWidthChars", dəyər: seçim.toString ()}, funksiya (cavab) {}); }};

Qalanları ...

Kodun qalan hissəsi çox sadədir:

Məzmun skripti və fon səhifəsi arasında chrome.runtime.sendMessage və onMessage istifadə edərək mesajları ötürün.

Chrome.notifications.create və chrome.notifications.onButtonClicked istifadə edərək istifadəçiyə bildirişlər göstərin.

Chrome.tabs.create ilə yeni bir nişan yaradın. Chrome.storage.sync istifadə edərək təmizlənmiş mətni göndərin.

Buradakı təfərrüatları sizə əsirgəməyəcəm

Nəticə

fəaliyyətdə zwBlocker!

ZwBlocker-ə salam deyin: Bir Chrome genişləndirməsi:

  • Səhifədə sıfır genişlikdəki simvolların sayını göstərir.
  • Seçilmiş mətndəki sıfır enlik simvolları tanıyır və istifadəçiyə xəbər verir.
  • Tələb olunduqda sıfır enlik simvolları süzür.

Nəticədən olduqca məmnunam - iş həftəsonu üçün pis deyil! Əlbətdə yaxşılaşdırma edilə bilər. Burada, Twitter-də şərh verməkdən və ya problem yaratmağınızdan və ya Github-a sorğu verməkdən çekinmeyin.

Bu töhfədən ilham alan yaradıcılara da təşəkkür edirəm. Aktiv müzakirələri görməyi və bu kimi şeylər üzərində işləməyi çox sevirəm.

Mən Aidan Breenəm və İrlandiyanın Dublin şəhərində proqram konsaltinqini aparıram. Bu yazını bəyənmisinizsə, məni Twitter-də izləyin və ya aylıq yeniləmələrdən az üçün şəxsi poçt siyahısına abunə olun.