【方法】在直接複製貼上內容的時候,可能已經不知不覺注入了一段不可視的「空白」

作者: Calpa Liu

出版:2018-04-06

前言

趁著深夜有空,我就翻譯了一篇有趣的文章。這篇文章是說如何插入任意文本到任意文本。有時候,文章都會被某些網站會直接引用博客內容。。。這一類的插入空白字符串方法,可以成為其中一個有力的追蹤源頭的線索。

空白符號不可視,不可說,那就是一個謎一樣的地方了。

經過實測,瀏覽器直接 Copy & Paste 都會把空白字符帶過去的。

Be careful what you copy: Invisibly inserting usernames into text with Zero-Width Characters 這一篇文章提到了加入謎一樣的空白符號的方法。

簡單來說就是把每一個要加密的文字轉換為不可視符號,然後塞到原本的文本裏面。

方法

第一步:分割文字,並轉換成二進制格式的符號。

const zeroPad = num =>00000000’.slice(String(num).length) + num;
const textToBinary = username => (
  username.split('').map(char =>
    zeroPad(char.charCodeAt(0).toString(2))).join(' ')
);

第二步:對於每一個二進制符號,並進一步編譯為加密符號

const binaryToZeroWidth = binary =>
  binary
    .split("")
    .map(binaryNum => {
      const num = parseInt(binaryNum, 10);
      if (num === 1) {
        return ""; // 零距離的空白
      } else if (num === 0) {
        return "‌"; // 零距離的非連接工具 (NON-JOINER)
      }
      return "‍"; // 零距離的連接工具 (JOINER)
    })
    .join(""); // 零距離的不中斷空白

第三步:加入這個不可視的符號到文字就行。

後記

Confidential Announcement: ​‌‌​‌‌‌‌​‌‌‌‌​‌‌‍​​‌‌​​‌‌‌​‌​​​​‍​​​​‌​‌‌‌​‌​​​‌‍​​​‌​‌​‌‌​​‌‌‌‌‍​​‌​‌​​​​‌​‌​‌‌‍​‌‌‌​​​​​‌‌‌‌‌​​‍​‌‌​‌‌‌‌‌​​‌​‌‌​‍​‌​‌​‌‌‌‌‌‌​‌‌‌‍​‌‌‌‌‌‌‌‌‌‌‌‌‌‌​‍​‌​​‌​​‌​‌​‌‌‌‌This is some confidential text that you really shouldn’t be sharing anywhere else.

希望大家玩得開心 www

延伸閱讀

  1. 關於代碼洩密的那些事
  2. Zero width Playground
  3. Be careful what you copy: Invisibly inserting usernames into text with Zero-Width Characters

關於 Calpa Liu

Avatar

Calpa 是一個四天工作的系統架構師,日常幫助客戶構建一站式網站應用,手機應用,雲端架構。

2023 年 9 月,Calpa 收到來自國內外不同 Web3 團隊的邀請,參加韓國的 KBW 2023 和新加坡的 TOKEN 2049 活動。十二月份,Calpa 將參加台北區塊鏈週的 Hackathon 比賽。

Calpa 擅長運用各種前沿技術,包括 TypeScript、React.js 和 Vue.js,開發具有 Responsive Web Design 的網站。另外,他透過運用 aws-cdk 和 TypeScript 技術的融合,實現了基於雲端的「基礎即代碼」(Infrastructure as Code)部署策略,建立了多套高效且具有可伸縮性的全端架構。

同時,Calpa 積極參與各個社群,活躍於香港和台灣的開源社區,分享前沿知識。他曾在 2019 年的香港開源大會中擔任重要講者,為聽眾提供寶貴的工作經驗和深刻見解。此外,Calpa 在 GitHub 上公開分享了個人博客程式碼,已獲得超過 300 顆星星和 60 個分支。

如果您對系統架構有任何問題,或需要進一步交流,請隨時聯絡 Calpa,他非常歡迎討論。