Skip to content

Zeroplex 生活隨筆

軟體開發、伺服器和生活瑣事

小 縮小字型大小。 中 重設字型大小。 大 放大字型大小。

產生短網址的 string ID

Posted on 2021 年 8 月 6 日2021 年 8 月 13 日 By 日落 在〈產生短網址的 string ID〉中尚無留言

在約 15 年前有嘗試想要自己做一個縮網址服務 (現在我做加長網址服務 XD),當時用來產生 string ID 的方法有弱點,被學弟抓出來打爆 (可以被預測下一個產生出來的 ID,然後建立 unliminted redirection)。最近摸到 crunch 這個工具,在重新思考以後,終於搞清楚向 ppt.cc 請教時得到的說明是什麼意思。

先說明有問題的作法,先建立 valid characters list,URL 有部份特出字元是 reserve character (RFC3986),所以像是 ?、=、@ 等字元有特殊用途不能被拿來當作參數傳遞,然後做「N 進位」轉成 string ID:

<?php

$char = ['a', 'b', 'c', '.....', '7', '8', '9', '0'];

例如:數字是 1 時,產生出來的 ID 是 a、數字是 116 時產生出來的 ID 是 a1。當時我是依照流水號,所以 ID 是可以被預測的,導致弱點被利用。

當時得到 ptt.cc 的回覆是「先產生完 key 再隨機選取可用的 key」。

這陣子才搞懂這個說明,先用 crunch 之類的工具把所有可用的 string 都先產生出來,然後需要時再隨機選取一個 string 來當作 key/ID 使用。這個作法有些優點:

  • 不需要先產生所有的 key,因為大概可以推算出大概可用的 ID 數量
  • 隨機挑選 key 就無法被猜到未來會被用到的 key,不容易被攻擊

接下來要傷腦筋的,大概就是怎麼樣有效率的從 DB 隨機取 key 了。

ps. 目前使用 3 個 digits,大概就有 20 多萬個 unique string 可用了,爽。

Tags:資訊學習

文章導覽

Previous Post: 在 SQL server 建立 Linked Database 連線到 MySQL
Next Post: OXOPO 1.5v 充電 鋰電池

發佈留言 取消回覆

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


其他

關於我  (About me)

小額贊助

  文章 RSS Feed

  留言 RSS Feed

Apache AWS Bash C/C++ Docker FreeBSD GCP Git Google Java JavaScript Laravel Linux Microsoft MSSQL MySQL Nginx PHP PHPUnit PostgreSQL Python Qt Ubuntu Unix Vim Web Windows WordPress XD 作業系統 分享 好站推薦 專題 攝影 新奇搞笑 新聞 旅遊 生活雜記 程式設計 網路架站 網頁設計 資訊學習 資訊安全 遊戲 音樂


創用 CC 授權條款
本著作係採用創用 CC 姓名標示-相同方式分享 4.0 國際 授權條款授權.