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 ยาว