แนวทางปฏิบัติที่ดีที่สุดในการรักษาความปลอดภัยเว็บ API คืออะไร


15

ฉันต้องสร้าง API บริการเว็บสำหรับแอพมือถือของเราเพื่อโต้ตอบกับเซิร์ฟเวอร์และฐานข้อมูลของเรา (ใน ASP.Net MVC 4 แต่มันไม่ค่อยเกี่ยวข้องกัน) การกระทำส่วนใหญ่ไม่ต้องการให้ผู้ใช้ลงทะเบียนกับบริการของเราเราต้องการ จำกัด การเข้าถึงเฉพาะผู้ใช้แอปของเราเท่านั้น

อะไรคือวิธีการตรวจสอบให้แน่ใจว่าการโทรออกจากที่อื่น (เช่นมีคนต้องการข้อมูลทั้งหมดของเราหรือสร้างแอปที่ไม่เป็นทางการ) ถูกปฏิเสธ?

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

ที่ดูเหมือนจะค่อนข้างง่ายในการใช้งานและถึงแม้ว่าอาจจะไม่ใช่ข้อพิสูจน์ 100% แต่ก็เป็นความคิดที่ดี คุณคิดอย่างไร?

คำตอบ:


15

ทันทีที่คุณปล่อยแอปพลิเคชันมันอาจถูกออกแบบวิศวกรรมย้อนกลับ ซึ่งหมายความว่าไม่มีอะไรที่คุณสามารถทำได้เพื่อให้ได้รับการปกป้อง 100% หากมีการแจกจ่ายแอปพลิเคชันเดียวกัน (ไบนารีเดียวกันการตั้งค่าเดียวกัน) ให้กับผู้ใช้ทั้งหมดของคุณ

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

ลองนึกภาพสคีมาดังต่อไปนี้:

  1. ลูกค้าเชื่อมต่อและส่งตัวระบุที่ไม่ซ้ำกัน (หนึ่งตัวระบุโดยผู้ใช้)
  2. เซิร์ฟเวอร์ตอบกลับโดยส่งการท้าทายที่เข้ารหัสด้วยรหัสสาธารณะ กุญแจสาธารณะนี้เชื่อมโยงกับตัวระบุเฉพาะที่ส่งไปก่อนหน้านี้
  3. ลูกค้าแก้ปัญหาด้วยการถอดรหัสข้อมูลโดยใช้กุญแจส่วนตัวและส่งความลับที่ถอดรหัสแล้วในแบบธรรมดากลับไปที่เซิร์ฟเวอร์
  4. เซิร์ฟเวอร์ตรวจสอบว่าข้อมูลลับที่ส่งตรงกับข้อมูลที่สร้างขึ้นตั้งแต่แรก

นักพัฒนาที่จะแฮ็กแอปพลิเคชันของคุณและรับรหัสส่วนตัวสำเร็จจะสามารถใช้ API ของคุณจากแอปพลิเคชันของเขาเอง แต่เขาจะเป็นตัวระบุสำหรับเซิร์ฟเวอร์ของคุณ

หากผู้ใช้รายเดียวกันสามารถทำคำขอ 10,000 คำขอให้กับ API ของคุณต่อวันและโดยเฉลี่ยผู้ใช้ที่ใช้งานอยู่ 2,000 คำขอต่อวันก็หมายความว่าผู้พัฒนารายนี้จะสามารถใช้แอปพลิเคชันของเขาเองและอาจมอบให้กับเพื่อน ๆ เขาจะไม่สามารถพูดขายให้กับคนหลายพันคนเพียงเพราะมันจะทำงานเพียงไม่กี่นาทีในตอนเช้า

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


หมายเหตุด้านข้างที่ไม่ตอบคำถามของคุณ แต่ยังอาจมีประโยชน์: อย่าคิดเกี่ยวกับ API เป็นเครื่องมือสำหรับผลิตภัณฑ์หลักของคุณ (แอปพลิเคชันมือถือ) คิดว่ามันเป็นผลิตภัณฑ์ชั้นหนึ่งตัวเองผลิตภัณฑ์ที่อาจจะจ่าย รูปแบบเดียวกันนี้ใช้มานานหลายปีโดย Amazon และ Google มันเริ่มใช้งานโดย Microsoft กับ Azure เป็นต้น

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

  • การสร้าง API เพื่อให้แอปพลิเคชันของคุณใช้งานได้ยากและมีราคาแพง เวลาและเงินนี้สามารถใช้กับบางสิ่งที่มีประโยชน์มากขึ้น

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

  • คุณไม่เคยคิดเลยว่าคนอื่นจะใช้ API ของคุณอย่างไร นี่คือสิ่งที่เกิดขึ้นกับ Kinect เดิม Microsoft สร้าง Kinect สำหรับเกม เมื่อ Microsoft เปิด API ให้กับสาธารณชนพวกเขาไม่เคยคิดเลยว่ามันจะถูกใช้ในอีกไม่กี่ปีต่อมาโดยแอปพลิเคชันทางวิทยาศาสตร์ภาคสุขภาพและอื่น ๆ มันคล้ายกับ web APIs: นักพัฒนาจำนวนมากกำลังใช้งานอยู่


คำตอบที่น่าสนใจมาก เราอาจต้องคิดว่าเราจะทำให้ API เป็นสาธารณะได้อย่างไร นอกจากนี้สำหรับการอ้างอิงตลาดเป้าหมายในฝรั่งเศสที่วิศวกรรมย้อนกลับและการถอดแยกชิ้นส่วนนั้นผิดกฎหมายดังนั้นเราควรหมกมุ่นกับเรื่องนี้มากเกินไป
แอนทอน

2
@Antoine: กราบไหว้วิศวกรรมจะผิดกฎหมายในประเทศใด ๆ ทันทีที่ใบอนุญาตห้าม แต่ความจริงที่ว่ามันผิดกฎหมายไม่ได้หมายความว่าจะไม่มีใครนับถือวิศวกรของแอปของคุณ
Arseni Mourzenko
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.