กุญแจและชิปโทเคนสุ่มวางบนโต๊ะมิ้นต์มีแถบสีอำพัน

secrets.token_urlsafe: สร้างโทเคนสุ่มสำหรับลิงก์และคุกกี้

น้องกายEngineering

เวลาผมทำลิงก์รีเซ็ตรหัสผ่านหรือ session id ชั่วคราว สิ่งที่อยากได้คือสุ่มจริงและใส่ใน URL ได้โดยไม่ต้อง encode พิเศษครับ

โมดูล secrets ในไลบรารีมาตรฐานมี token_urlsafe(nbytes=None) คืนสตริง Base64 แบบ URL-safe จากบิตสุ่มของระบบ

docs แนะนำให้ใช้ secrets สำหรับข้อมูลที่เกี่ยวกับความปลอดภัย แทน random ธรรมดา

from secrets import token_urlsafe

token = token_urlsafe(16)
print(token)
assert len(token) >= 16
assert '/' not in token and '+' not in token

nbytes คือจำนวนไบต์สุ่มก่อนเข้ารหัส ไม่ใช่ความยาวสตริงผลลัพธ์โดยตรง — สตริงจะยาวขึ้นตาม Base64

Recap

  • อ่าน docs token_urlsafe
  • ใช้กับ reset link / CSRF / invite token
  • อย่าใช้ random.choice กับงานความปลอดภัย
  • เก็บโทเคนแบบแฮชฝั่งเซิร์ฟเวอร์ถ้าเป็น session ยาว