การรับรองความถูกต้องขั้นพื้นฐานใน FastAPI

เมื่อคุณสร้าง API การรักษาความปลอดภัยถือเป็นสิ่งสำคัญมาก สมมติว่าผู้โจมตีพบทางไปยัง API ของคุณ ในกรณีที่เลวร้ายที่สุด เขาสามารถแก้ไขข้อมูลของคุณได้ แน่นอนว่าคุณต้องการหลีกเลี่ยงสิ่งนั้นตลอดเวลา ดังนั้น ขั้นตอนแรกที่ดีคือการเพิ่มวิธีการตรวจสอบสิทธิ์แบบง่ายๆ

ด้วยชื่อผู้ใช้และรหัสผ่าน คุณทำให้ผู้โจมตีเข้าถึงแอปพลิเคชันเว็บของคุณได้ค่อนข้างยาก บทความนี้จะสอนวิธีใช้การรับรองความถูกต้องขั้นพื้นฐานด้วย FastAPI

ข้อมูลรับรองการเข้าถึงจากตัวควบคุม

หากคุณต้องการรักษาความปลอดภัยตัวควบคุมส่วนที่เหลือ คุณต้องกำหนดรูปแบบการรักษาความปลอดภัย ข้อมูลนี้มีให้แล้วใน FastAPI ซึ่งช่วยประหยัดเวลาและความพยายามของคุณ มันไม่ซับซ้อนไปกว่านี้:

http_basic = fastapi.security.HTTPBasic()

ขั้นต่อไป คุณจะต้องศึกษาข้อมูลของผู้ใช้ ผู้ใช้ API ระบุชื่อผู้ใช้และรหัสผ่านในการตรวจสอบสิทธิ์ขั้นพื้นฐาน สิ่งเหล่านี้มาในวัตถุ credentials รหัสด้านล่างแสดงวิธีที่คุณสามารถดูข้อมูลรับรอง:

@app.get("/books")
def find_all_books(credentials: HTTPBasicCredentials = fastapi.Depends(http_basic)) -> List[Book]:
    security_service.verify(credentials)
    return book_service.find_all()

นี่คือตัวอย่างโค้ดที่ใช้ค้นหารายชื่อหนังสือ ข้อมูลรับรองที่ผู้ใช้ระบุสามารถเข้าถึงได้ผ่านพารามิเตอร์ credentials

security service จะตรวจสอบข้อมูลรับรอง หากสิ่งเหล่านี้ไม่ถูกต้อง โค้ดส่วนนี้จะแสดงข้อผิดพลาด 401: ไม่ได้รับอนุญาต ฟังก์ชันการตรวจสอบบริการรักษาความปลอดภัยเป็นวิธีการป้องกัน มิฉะนั้น ขั้นตอนการดำเนินการจะดำเนินต่อไปและส่งคืนรายการหนังสือ

ป้องกันการรั่วไหลของข้อมูลไปยังผู้โจมตี

การตรวจสอบสิทธิ์ขั้นพื้นฐานเป็นวิธีที่ตรงไปตรงมาในการรักษาความปลอดภัยให้กับ API ข้อผิดพลาดในการใช้งานทำให้มีช่องโหว่ ผู้โจมตีรู้ว่าอัลกอริทึมทำงานอย่างไร พวกเขาใช้การโจมตีแบบกำหนดเป้าหมายเพื่อดึงข้อมูล

การโจมตีที่สำคัญที่สุดที่คุณต้องป้องกันตัวเองคือการโจมตีด้วยกำลังและจังหวะที่ดุร้าย

วิธีที่ดีที่สุดในการป้องกันตัวเองจากการโจมตีด้วยกำลังดุร้ายซึ่งมีการเลือกชื่อผู้ใช้และรหัสผ่านแบบสุ่มคือการเลือกชื่อผู้ใช้และรหัสผ่านขนาดยาวที่ประกอบด้วยอักขระ ตัวเลข และสัญลักษณ์ที่แตกต่างกัน นั่นน่าจะทำให้การขโมยรหัสผ่านของคุณเป็นเรื่องยากมาก

อย่าเก็บข้อมูลรับรองในซอร์สโค้ด เก็บไว้ในตัวแปรสภาพแวดล้อมหรือใช้บริการเฉพาะเช่น Azure Vault หรือ AWS KMS

ผู้โจมตีจะพยายามได้รับสิทธิ์อย่างน้อยหนึ่งรายการ เขาลดงานลงครึ่งหนึ่งหากได้รับชื่อผู้ใช้หรือรหัสผ่าน ดังนั้นอย่าบอกผู้ใช้ว่ารหัสผ่านหรือชื่อผู้ใช้นั้นถูกต้องหรือไม่ เป็นทั้งสองอย่างหรือไม่มีเลย นอกจากนี้ ฉันเชื่อมชื่อผู้ใช้และรหัสผ่านเข้าด้วยกันก่อนที่จะทำการเปรียบเทียบ ด้วยวิธีนี้ พวกเขาจะได้รับการปฏิบัติเหมือนเป็นข้อมูลประจำตัวเดียว

สุดท้ายนี้ เราใช้ฟังก์ชัน compare_digest ของโมดูล secure เพื่อป้องกันการโจมตีแบบกำหนดเวลา ซึ่งจะระบุความยาวของรหัสผ่านแก่ผู้โจมตี ผลลัพธ์แสดงไว้ด้านล่าง:

บทสรุป

ในบทความนี้ คุณได้เรียนรู้ว่าการเพิ่มการรับรองความถูกต้องขั้นพื้นฐานใน FastAPI เป็นเรื่องง่าย คุณสามารถอ่านข้อมูลรับรองและเริ่มตรวจสอบได้ หากผู้ใช้ไม่ได้ให้ข้อมูลประจำตัวที่ถูกต้อง คุณจะส่งคืน 401 มิฉะนั้น กระบวนการจะดำเนินต่อไป

อย่างไรก็ตาม คุณควรคิดอย่างรอบคอบเกี่ยวกับวิธีการใช้การรับรองความถูกต้องขั้นพื้นฐาน ด้วยข้อผิดพลาดในการใช้งานง่ายๆ คุณสามารถทำให้ตัวเองเสี่ยงต่อการถูกโจมตีได้ ดังนั้นอย่าลืมใช้มาตรการเพิ่มเติมหากคุณต้องการป้องกันตัวเองมากยิ่งขึ้น

ขั้นตอนถัดไปที่สมเหตุสมผลคือวิธีการตรวจสอบสิทธิ์ที่คุณต้องระบุตัวตนโดยใช้บุคคลที่สาม เช่น บัตรประจำตัวประชาชน หรือการจดจำใบหน้า ความพยายามในการรักษาความปลอดภัยเพิ่มเติมนี้จะทำให้ผู้โจมตีเข้าถึง API ของคุณได้ยากมาก

อย่างไรก็ตาม สำหรับแอปพลิเคชันที่มีความเสี่ยงน้อยกว่า การพึ่งพาบางอย่าง เช่น การตรวจสอบสิทธิ์ขั้นพื้นฐาน และสำรองข้อมูลที่ดีเป็นประจำไปยังระบบที่มีการป้องกันอย่างดีในระบบคลาวด์ก็เพียงพอแล้ว