มันเกินความเป็นวิศวกรรมหรือไม่ถ้าฉันเพิ่มการป้องกันการกระทำผิดโดยเจตนาของผู้ใช้ (เพื่อกล่าวอย่างอ่อนโยน) หากความเสียหายที่ผู้ใช้สามารถได้รับนั้นไม่เกี่ยวข้องกับรหัสของฉันหรือไม่?
เพื่อชี้แจงฉันกำลังเปิดเผยบริการ JSON RESTful แบบนี้:
GET /items - to retrieve list of user's items
PUT /items/id - to modify an item
POST /items - to add a new item
บริการนี้ไม่ได้มีไว้สำหรับใช้กับเบราว์เซอร์ แต่มาจากแอปพลิเคชันบุคคลที่สามซึ่งควบคุมโดยผู้ใช้ (เช่นแอพโทรศัพท์แอพเดสก์ท็อป ฯลฯ ) นอกจากนี้บริการควรไม่มีสถานะ (เช่นเซสชันน้อย)
การรับรองความถูกต้องจะทำกับการตรวจสอบขั้นพื้นฐานผ่าน SSL
ฉันกำลังพูดถึงพฤติกรรม "อันตราย" ที่เป็นไปได้เช่นนี้:
ผู้ใช้ป้อน URL ของ GET ในเบราว์เซอร์ (ไม่มีเหตุผลยกเว้น ... ) เบราว์เซอร์จะถาม Auth พื้นฐานประมวลผลและเก็บ Auth สำหรับเซสชันการสืบค้นปัจจุบัน โดยไม่ต้องปิดเบราว์เซอร์ผู้ใช้จะเข้าชมเว็บไซต์ที่เป็นอันตรายซึ่งมีจาวาสคริปต์CSRF / XSRF ที่เป็นอันตรายซึ่งทำให้ POST เข้าสู่บริการของเรา
สถานการณ์ข้างต้นไม่น่าเป็นไปได้สูงและฉันรู้ว่าจากมุมมองทางธุรกิจฉันไม่ควรกังวลมากเกินไป แต่เพื่อประโยชน์ในการปรับปรุงสถานการณ์คุณคิดว่าหากต้องการชื่อผู้ใช้ / รหัสผ่านในข้อมูล JSON POST เช่นกันจะช่วยได้หรือไม่
หรือฉันควรปล่อย Basic Auth ทั้งหมดกำจัด GET และใช้เฉพาะ POST / PUT ที่มีข้อมูลการอนุญาตในนั้น ในขณะที่การรับข้อมูลรางน้ำ GET นั้นยังมีความอ่อนไหว
ในอีกด้านหนึ่งการใช้ส่วนหัวที่กำหนดเองถือว่าเป็นการใช้งาน REST อย่างแท้จริงหรือไม่ ฉันสามารถดร็อปการตรวจสอบขั้นพื้นฐานและใช้ส่วนหัวที่กำหนดเองได้ ด้วยวิธีนี้อย่างน้อยการโจมตี CSRF จากเบราว์เซอร์สามารถหลีกเลี่ยงได้และแอปพลิเคชันที่ใช้บริการจะตั้งชื่อผู้ใช้ / รหัสผ่านในฮีทเตอร์แบบกำหนดเอง ไม่ดีสำหรับวิธีนี้คือตอนนี้บริการไม่สามารถใช้งานได้จากเบราว์เซอร์