26 คะแนน โดย GN⁺ 2023-11-26 | 6 ความคิดเห็น | แชร์ทาง WhatsApp
  • Sqids เป็นไลบรารีโอเพนซอร์สที่สร้าง ID สไตล์ YouTube จากตัวเลข
  • ID ที่สร้างขึ้นมีขนาดสั้น สามารถสร้างด้วยชุดอักขระที่กำหนดเองได้ และรับประกันว่าไม่เกิดการชนกัน
  • ตัวอย่าง ID ที่ให้มามีรูปแบบเช่น https://example.com/Lqj8a0

เหตุผลที่ใช้ Sqids

  • จุดประสงค์หลักของ Sqids คือด้านการแสดงผลให้ดูดี
  • หากต้องการใช้ ID แทนตัวเลขในเว็บแอป Sqids อาจเป็นตัวเลือกที่ดี
  • ตัวอย่างการใช้งาน ได้แก่ การย่อลิงก์ การใช้งานที่ปลอดภัยกับ URL, event ID, การเข้ารหัส/ถอดรหัสแบบไม่ชนกัน และรหัสผ่านใช้ครั้งเดียว
  • ไม่เหมาะกับข้อมูลที่มีความอ่อนไหว และหากใช้เป็น user ID อาจทำให้จำนวนผู้ใช้ถูกเปิดเผยได้

คุณสมบัติของ Sqids

  • สามารถสร้าง ID แบบสั้นจากตัวเลขที่ไม่เป็นลบ
  • เข้ารหัสและถอดรหัสได้ง่าย
  • ID ที่สร้างอัตโนมัติจะไม่มีคำหยาบทั่วไปปะปนอยู่
  • รองรับการสลับชุดอักขระสำหรับสร้าง ID แบบกำหนดเอง
  • รองรับภาษาโปรแกรม 40 ภาษา โดย 15 ภาษาในนั้นใช้ดีไซน์ใหม่
  • สร้าง ID เดียวกันได้ในทุกเวอร์ชัน
  • มีขนาดไลบรารีเล็กและใช้ไลเซนส์ที่ผ่อนปรน

ความเห็นของ GN⁺

  • ไลบรารี Sqids มีประโยชน์สำหรับนักพัฒนาที่ต้องการใช้ ID แบบสั้นและไม่ชนกันแทนตัวเลขในเว็บแอป
  • ไลบรารีนี้มอบ ID ที่ดูน่าสนใจในเชิงภาพ และรองรับภาษาโปรแกรมที่หลากหลาย ทำให้เข้าถึงได้ง่าย
  • มอบโอกาสที่เป็นประโยชน์ต่อผู้พัฒนาโอเพนซอร์ส และลิขสิทธิ์ได้รับการคุ้มครองภายใต้ MIT License

6 ความคิดเห็น

 
haebom 2023-11-27

เหมาะสำหรับกันการครอว์ลิงได้ดีนะ

 
stardust33 2023-11-30

ช่วยอธิบายเพิ่มเติมได้ไหมครับ/คะ ว่าใช้อย่างไรถึงจะป้องกันการครอว์ลได้?

 
ragus 2023-12-02

ถ้า URL เป็นแค่ posts/1, posts/2, posts/3 ครอว์เลอร์ก็จะใส่ 1,2,3,4,5... แล้วไล่วนไปเรื่อย ๆ
แต่ถ้า URL เป็นแบบ posts/L12Qsd, posts/dei24A ก็น่าจะทำแบบนั้นไม่ได้ ก็เลยเป็นแบบนั้นมั้งครับ

 
stardust33 2023-12-05

อ๋อ! ขอบคุณสำหรับคำตอบครับ

 
jaypark 2023-11-27

สงสัยว่ามันต่างจาก hashids ยังไงเลยลองค้นดู พอเข้า https://hashids.org ก็ถูกพาไปที่ https://sqids.org/ ดูเหมือนว่าจะเปลี่ยนชื่อนะครับ

https://sqids.org/faq#hashids

 
GN⁺ 2023-11-26
ความคิดเห็นจาก Hacker News
  • ความเป็นไปได้ที่จะได้อินไซต์ทางธุรกิจจากบริษัทที่ใช้ ID แบบต่อเนื่อง

    • ตัวอย่างเช่น สามารถประเมินอัตราการเติบโตของบริษัทได้จาก ID ที่ได้รับตอนสมัครสมาชิก
    • ใช้ได้กับทรัพยากรทุกประเภทภายในแอปพลิเคชัน
    • สงสัยว่า 'ค่าขยะ' ในแถบ URL มีความสำคัญมากแค่ไหนในยุคนี้
    • เนื่องจากเบราว์เซอร์ส่วนใหญ่ซ่อน URL ไปเกือบทั้งหมด จึงใช้ uulids ระหว่างรอการใช้งาน UUID v7 อย่างแพร่หลาย
    • องค์ประกอบด้านเวลาที่มีอยู่ในตัวมีประโยชน์ในบางครั้ง (เช่น กฎการรวมอ็อบเจ็กต์)
  • ข้อสงสัยเกี่ยวกับการกล่าวถึงรหัสผ่านใช้ครั้งเดียว

    • รหัสผ่านควรคาดเดาไม่ได้ แต่ไม่จำเป็นต้องไม่ซ้ำเสมอไป
    • ถ้ามีแหล่งสุ่มที่เหมาะสมก็ใช้งานได้ แต่คุณลักษณะการ 'ยัดค่าขยะเข้าไป' ทำให้มันดูซับซ้อนกว่าความเป็นจริง
    • ตัวเลขสุ่ม 4~8 หลักก็ใช้งานได้ดี และให้ระดับความปลอดภัยที่ชัดเจน
    • ตัวเลขเข้าใจง่ายกว่าตัวอักษรละตินที่แยกพิมพ์เล็กพิมพ์ใหญ่ โดยเฉพาะสำหรับผู้ใช้ภาษาที่ใช้ระบบอักขระอื่น
  • ผิดหวังที่ไม่สามารถฟอร์แมตจำนวนเต็ม 128 บิตหรืออาร์เรย์ไบต์ได้

    • ซึ่งจะทำให้ฟอร์แมต UUID ได้
    • ไม่ค่อยชอบการใช้ integer ID แบบเปิดเผยต่อสาธารณะ
    • มีความเสี่ยงที่ ID แบบเรียงลำดับจะทำให้ข้อมูลสำคัญรั่วไหล
    • ชอบทำให้ UUID สั้นลงด้วยการฟอร์แมตเป็น Base64URL สำหรับใช้ใน URL, QR code เป็นต้น
  • ในแอปพลิเคชัน Ruby ใช้วิธีแปลงเป็นเลขฐานสูง

    • Sqid มีไลบรารี Ruby ให้และอนุญาตให้ตั้งค่าฐานได้สูงกว่ามาก รวมถึงตัวอักษรพิมพ์ใหญ่และอีโมจิ
    • ต้องเป็นตัวเลขที่ใหญ่กว่านี้มากก่อนที่การประหยัดพื้นที่จะสร้างความแตกต่างอย่างมีนัยสำคัญ
    • ยากที่จะรู้ว่าคุ้มค่าหรือไม่ที่จะเพิ่ม dependency ใหม่
  • การกรองคำหยาบอาจกลายเป็นภาระโดยตัวดีไซน์เอง

    • ต้องคงรายการคำต้องห้ามไว้แบบไม่เปลี่ยนแปลงเพื่อรักษาการเข้ารหัสเดิม
    • ไม่เช่นนั้น sqids ก่อนหน้าที่สร้างไว้แล้วอาจถูกถอดรหัสผิด
  • ชอบใช้ nanoid และการใช้ชุดอักขระที่ปลอดภัย

    • เสนอให้ใช้แนวทางแบบพจนานุกรมที่คล้ายกันแทนการทำแบบ hardcoded เพื่อหาคำ 'ไม่ดี'
    • แสดงความสนใจต่อชุดทดสอบประสิทธิภาพ
    • ในภาษาส่วนใหญ่ การสร้าง UUID v4 ถูกปรับให้เหมาะสมอยู่แล้ว จึงสงสัยว่าโซลูชันแบบปรับแต่งเองจะดีกว่าจริงหรือไม่
  • การอภิปรายเกี่ยวกับการใช้สตริงที่สร้างแบบสุ่ม

    • ใช้กับ ID, โทเค็นกู้คืนรหัสผ่าน เป็นต้น
    • มีการสร้างไปแล้วหลายล้านรายการ และมีคนตรวจสอบสิ่งเหล่านี้วันละหลายแสนคน
    • ไม่เคยมีกรณีร้องเรียนเกี่ยวกับ content ID แบบสุ่ม
    • สังคมสมัยใหม่กลัวการทำให้ใครบางคนไม่พอใจมากเกินไป จนตัวกรองคำหยาบถูกขยายไปถึง ID ในฐานข้อมูลและโทเค็นกู้คืนรหัสผ่าน
    • หากตั้งความยาวขั้นต่ำเป็น 8 โอกาสที่จะมีคำหยาบแบบเป็นคำเต็มปรากฏเป็นทั้ง ID ก็ต่ำมาก
  • สับสนกับการให้ลิงก์สำหรับ 40 ภาษาในส่วน "Get Started"

    • จาก 40 ภาษา มีเพียง 15 ภาษาที่เริ่มใช้งานได้จริง ส่วนอีก 25 ภาษาเป็นเพียง skeleton repository ที่ขอให้คนไปกด star เพื่อแสดงความสนใจ
  • คำถามเกี่ยวกับวิธีปรับหรือพัฒนาบล็อกลิสต์

    • ถ้า ID ติด blacklist ก็แค่เพิ่มค่า
    • ID จะผูกติดกับเนื้อหาของ blacklist และถ้ามีการปรับสิ่งนี้ เซกเมนต์บางส่วนของ ID ที่สร้างไว้ก่อนหน้าอาจใช้ไม่ได้
  • ในเธรดนี้หลายคนบอกว่าเป็นวิธีที่ดีในการซ่อนอินไซต์จาก ID/ตัวเลข

    • แต่เมื่อค่าที่สร้างขึ้นมาสามารถถอดรหัสได้ง่าย ก็เลยตั้งคำถามว่าแค่ถอดรหัสตัวเลขไม่กี่ตัวก็อาจได้อินไซต์อยู่ดีหรือไม่