Meteor มีกลไกความปลอดภัยอะไรบ้าง? [ปิด]


92

เราทุกคนรู้ดีว่า Meteor มีไดรเวอร์ miniMongo ซึ่งช่วยให้ไคลเอนต์เข้าถึงเลเยอร์ถาวร (MongoDB) ได้อย่างราบรื่น

หากลูกค้ารายใดสามารถเข้าถึง API ถาวรได้วิธีหนึ่งจะทำให้แอปพลิเคชันของเขาปลอดภัยได้อย่างไร

กลไกการรักษาความปลอดภัยที่ Meteor มีให้คืออะไรและควรใช้ในบริบทใด?


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

6
Meteor 0.5.0 เพิ่มการพิสูจน์ตัวตนผู้ใช้Meteor.com/blog/2012/10/17/…
hipertracker

คุณสามารถพูดซ้ำเล็กน้อยเพื่อเปิดใหม่ อาจจะเป็น "ฉันควรใช้มาตรการรักษาความปลอดภัยอะไร" หรือ "มีตัวเลือกความปลอดภัยอะไรบ้าง"
joeytwiddle

1
ตามความคิดเห็น? วัต? ฉันคิดว่านี่เป็นการเปิดการตรวจสอบอีกครั้งเนื่องจากเห็นได้ชัดว่าไม่ใช่ความคิดเห็น
bjb568

ฉันเห็นด้วยมากการพิจารณาคดีตามความคิดเห็นไม่อยู่ในบริบท - คำตอบอยู่บนพื้นฐานของข้อเท็จจริงที่แท้จริง
Olivier Refalo

คำตอบ:


64

เมื่อคุณสร้างแอปโดยใช้คำสั่งดาวตกโดยค่าเริ่มต้นแอปจะมีแพ็คเกจต่อไปนี้:

  • อัตโนมัติ
  • ไม่ปลอดภัย

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

หากต้องการเพิ่มมากขึ้น Meteor รองรับแพ็คเกจFacebook / Twitter / และอีกมากมายเพื่อจัดการการรับรองความถูกต้องและที่เด็ดที่สุดคือแพ็คเกจAccounts-UI


2
ถูกต้อง ณ ดาวตก 0.5
Olivier Refalo

5
ไม่ปลอดภัยโดยปริยาย อ๊ะ.
Judah Gabriel Himango

16
@JudahHimango ไม่ปลอดภัยสำหรับวัตถุประสงค์ในการทดสอบเท่านั้นและการลบทั้งสองแพ็คเกจเมื่อคุณพร้อมสำหรับการผลิตนั้นง่ายพอmeteor remove autopublish insecure
BenjaminRH

1
วิธีการเกี่ยวกับดาวตก? ไคลเอนต์สามารถเข้าถึงได้จากคอนโซลแม้ว่าจะถอนการติดตั้งที่ไม่ปลอดภัยเนื่องจากรันบนเซิร์ฟเวอร์ จะทำให้ปลอดภัยได้อย่างไร?
Matanya

2
@ Matanya แต่เมื่อใช้และดำเนินการจากคอนโซลจะทำให้เกิดaccess deniedข้อผิดพลาด ลองดูสิ
ajduke

35

ในเอกสารคอลเลกชันกล่าวว่า:

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


1
ดูหัวข้อนี้ใน Quora พร้อมคำตอบจากหนึ่งในผู้พัฒนา Meteor: quora.com/Meteor-web-framework/Whats-cool-about-Meteor/answer/…
dentarg

1
@jonathanKingston ลิงค์เสียคุณช่วยอัพเดทได้ไหม
Carlos Barcelona

@CarlosBarcelona โดเมนหมดอายุและบทความนี้อยู่ก่อนการอัปเดตความปลอดภัยใน Meteor ฉันคิดว่ามันยุติธรรมแล้วที่จะบอกว่ามันล้าสมัย ดังนั้นฉันจึงลบความคิดเห็นเพื่อประหยัดเวลาของผู้คน ขอบคุณ
jonathanKingston

5

หากคุณกำลังพูดถึงการ จำกัด ไคลเอ็นต์ไม่ให้ใช้แทรก / อัปเดต / ลบ API ที่ไม่ได้รับอนุญาตของคุณก็เป็นไปได้

ดูแอปสิ่งที่ต้องทำของพวกเขาได้ที่https://github.com/meteor/meteor/tree/171816005fa2e263ba54d08d596e5b94dea47b0d/examples/todos

นอกจากนี้พวกเขายังได้เพิ่มโมดูล AUTH ในตัวซึ่งช่วยให้คุณสามารถเข้าสู่ระบบและลงทะเบียนได้ จึงปลอดภัย เท่าที่คุณดูแล XSS, Valiation, Client Headers เป็นต้น

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


1
นี่เป็นความจริงอย่างสมบูรณ์ ณ กันยายน 2555
Olivier Refalo

2

ณ 0.6.4 ระหว่างโหมดการพัฒนาบล็อก is_client และ is_server ยังคงไปที่ระบบไคลเอนต์ ฉันไม่สามารถพูดได้ว่าสิ่งเหล่านี้แยกออกจากกันเมื่อคุณปิดโหมดการพัฒนา

อย่างไรก็ตามหากไม่เป็นเช่นนั้นแฮ็กเกอร์อาจได้รับข้อมูลเชิงลึกจากระบบโดยตรวจสอบบล็อกของโค้ด if (Meteor.is_server) สิ่งนี้ทำให้ฉันกังวลเป็นพิเศษโดยเฉพาะอย่างยิ่งเนื่องจากฉันสังเกตว่าในตอนนี้ฉันยังไม่สามารถแยกคอลเล็กชันออกเป็นไฟล์แยกกันบนไคลเอนต์และเซิร์ฟเวอร์ได้

อัปเดต

ประเด็นคืออย่าใส่รหัสที่เกี่ยวข้องกับความปลอดภัยในบล็อก is_server ในไดเรกทอรีที่ไม่ใช่เซิร์ฟเวอร์ (เช่น - ตรวจสอบให้แน่ใจว่าอยู่ในสิ่งที่อยู่ภายใต้ / เซิร์ฟเวอร์

ฉันต้องการดูว่าฉันรู้สึกไม่ดีที่ไม่สามารถแยกคอลเลกชันไคลเอนต์และเซิร์ฟเวอร์ในไดเร็กทอรีไคลเอนต์และเซิร์ฟเวอร์ได้หรือไม่ ในความเป็นจริงไม่มีปัญหากับเรื่องนี้

นี่คือการทดสอบของฉัน เป็นตัวอย่างง่ายๆของรูปแบบการเผยแพร่ / สมัครสมาชิกที่ดูเหมือนจะใช้งานได้ดี http://goo.gl/E1c56


1
วิธีแก้ปัญหาคือการบันทึกรหัสของคุณในเซิร์ฟเวอร์ / โฟลเดอร์ - วิธีนี้จะไม่ถูกส่งไปยังไคลเอนต์
Olivier Refalo

DrM โปรดดูdocs.meteor.com/#structuringyourapp - รหัสที่ละเอียดอ่อนไม่จำเป็นต้องส่งถึงลูกค้า
emgee

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

อืมแปลกการทดสอบดูเหมือนจะดีจะอัปเดตคำตอบ
DrM

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