วิธีการรักษาความปลอดภัยบริการเว็บ RESTful?


88

ฉันมีการดำเนินการรักษาความปลอดภัยบริการเว็บสงบ ฉันได้หาข้อมูลโดยใช้ Google แล้ว แต่ฉันติดขัด

ตัวเลือก:

TLS (HTTPS) +

มีตัวเลือกอื่น ๆ ที่เป็นไปได้ให้พิจารณาหรือไม่? ถ้า OAuth แล้วรุ่นอะไร มันสำคัญหรือไม่? จากสิ่งที่ผมได้อ่านเพื่อให้ห่างไกลOAuth 2.0พร้อมด้วยสัญญาณถือ (ที่ไม่มีลายเซ็น) ดูเหมือนว่าจะไม่ปลอดภัย

ฉันได้พบบทความที่น่าสนใจอีกมากในการตรวจสอบส่วนที่เหลือตาม

รักษาความปลอดภัย REST API ของคุณ ... วิธีที่ถูกต้อง

คำตอบ:


59

มีวิธีอื่นที่ปลอดภัยมาก เป็นใบรับรองไคลเอ็นต์ รู้ว่าเซิร์ฟเวอร์แสดงใบรับรอง SSL อย่างไรเมื่อคุณติดต่อกับ https? เซิร์ฟเวอร์สามารถขอใบรับรองจากไคลเอนต์เพื่อให้พวกเขารู้ว่าลูกค้าคือใคร ลูกค้าสร้างใบรับรองและมอบให้กับคุณผ่านช่องทางที่ปลอดภัย (เช่นเข้ามาในสำนักงานของคุณด้วยคีย์ USB - ควรใช้คีย์ USB ที่ไม่ได้โทรจัน)

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

ปวดคอ? อย่างแน่นอน ดีทุกอย่าง? ไม่ ปลอดภัยมาก? ได้.

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

อย่างไรก็ตามอาจไม่ใช่วิธีแก้ปัญหาที่คุณกำลังมองหา (อาจจะไม่ตรงไปตรงมา) แต่เป็นอีกทางเลือกหนึ่ง


เอาล่ะตอนนี้ฉันกำลังสับสนเป็นที่หนึ่งที่ดีกว่าวิธีนี้หรือคำตอบอื่น คุณช่วยอธิบายได้ไหม? : D
fikr4n

คำตอบของคุณจะสมบูรณ์แบบสำหรับผู้เชี่ยวชาญ แต่มันสับสนสำหรับมือใหม่ คุณช่วยให้ข้อมูลรายละเอียดหรือลิงค์เพื่ออ่านต่อได้หรือไม่?
Rajan Rawal

หากใบรับรองมีการลงนามด้วยตนเองจะยัง "ปลอดภัยมาก" หรือไม่
Joyce

@ จอยซ์ฉันคิดว่าไม่ เนื่องจากคุณไม่ได้รับความไว้วางใจ (ไม่มีความผิด) ใบรับรองที่คุณลงนาม (ด้วยใบรับรองของคุณเอง) จึงไม่สามารถเชื่อถือได้ ฉันเชื่อว่าใบรับรองที่ลงนามด้วยตนเองมีประโยชน์มากกว่าสำหรับการทดสอบ
mbmast

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

18

HTTP Basic + HTTPS เป็นวิธีการทั่วไปวิธีหนึ่ง


3
ฉันไม่คิดว่า http Digest จะให้อะไรคุณมากกว่า http พื้นฐานถ้าทั้งคู่อยู่บน https
pc1oad1etter

3
คุณสามารถเพิ่มข้อมูลที่เป็นประโยชน์เกี่ยวกับประโยชน์ของ HTTP Digest ได้โดยไม่ต้องใช้น้ำเสียงอย่างจริงจัง
pc1oad1etter

9

หากเลือกระหว่างเวอร์ชัน OAuth ให้ใช้ OAuth 2.0

ควรใช้โทเค็นผู้ถือ OAuth กับการขนส่งที่ปลอดภัยเท่านั้น

โทเค็นผู้ถือ OAuth มีความปลอดภัยหรือไม่ปลอดภัยพอ ๆ กับการขนส่งที่เข้ารหัสการสนทนา HTTPS ดูแลการป้องกันการโจมตีซ้ำดังนั้นจึงไม่จำเป็นที่โทเค็นของผู้ถือจะต้องป้องกันการเล่นซ้ำ

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

หากคุณต้องการรักษาความปลอดภัยของเพย์โหลดที่ส่งผ่านผู้เข้าร่วมหลายคนคุณต้องมีอะไรที่มากกว่า HTTPS / SSL เนื่องจาก HTTPS / SSL เข้ารหัสลิงก์เดียวของกราฟเท่านั้น นี่ไม่ใช่ความผิดของ OAuth

โทเค็นของผู้ถือเป็นเรื่องง่ายสำหรับลูกค้าที่จะได้รับลูกค้าใช้สำหรับการเรียก API ได้ง่ายและใช้กันอย่างแพร่หลาย (ด้วย HTTPS) เพื่อรักษาความปลอดภัย API ที่เปิดเผยต่อสาธารณะจาก Google, Facebook และบริการอื่น ๆ อีกมากมาย

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.