ตัวเลือกของฉันสำหรับการทำสคริปต์แซนด์บ็อกซ์ฝั่งเซิร์ฟเวอร์คืออะไร? [ปิด]


11

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

ดังนั้นฉันจึงได้พบกับ node.js ในฐานะล่ามจาวาสคริปต์และและอีกหลายชั่วโมงก่อนหน้านี้กับ Google V8 (v8 เหมาะสมกับสิ่งนี้หรือไม่) CoffeeScript ก็เข้ามาในใจของฉันเพราะมันดูดีและยังคงเป็นจาวาสคริปต์

ฉันคิดว่าจาวาสคริปต์นั้นแพร่หลายมากและ "sandboxeable" มากขึ้นเนื่องจากไม่มีการเรียกใช้ระบบปฏิบัติการหรือสิ่งที่ไม่ปลอดภัยจากระยะไกล (ฉันคิดว่า)

โดยวิธีการที่ฉันเขียนระบบบน Perl และ Php สำหรับส่วนหน้า

เพื่อปรับปรุงคำถาม: ฉันเลือกจาวาสคริปต์เพราะฉันคิดว่าปลอดภัยและเรียบง่ายพอที่จะนำไปใช้กับ node.js แต่มีทางเลือกอื่นอะไรบ้างที่จะทำให้งานนี้สำเร็จ Lua? งูใหญ่? ฉันไม่สามารถหาข้อมูลเกี่ยวกับวิธีการใช้ล่ามแบบ Sandbox ในวิธีที่เหมาะสม


มันไม่ชัดเจนในสิ่งที่คุณถาม เป็นไปได้ไหม? แน่นอนมันเป็นไปได้
Robert Harvey

คำตอบ:


3

Java มีล่าม JavaScript ในตัว ไม่ใช่แซนด์บ็อกซ์เริ่มต้น แต่สามารถเปิดใช้งานได้โดย:

  • การตั้งค่าคลาสชัตเตอร์ให้ถูกต้อง - JavaScript สามารถโหลดคลาส Java ได้ตามปกติ คลาสชัตเตอร์เป็นตัวจัดการความปลอดภัยชนิดหนึ่งซึ่งตัดสินใจว่าจะโหลดคลาสใดและไม่สามารถทำได้
  • สคริปต์ "startup" - การเริ่มต้น JavaScript แบบสั้นซึ่งจะลบจุดเชื่อมต่อไปยังระบบภายนอก: java = undefined;Packages = undefined;org = undefined;

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

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

ฉันใช้สิ่งนี้ใน Java 7 ซึ่งมีเอ็นจิ้น Rhino JavaScript Java 8 นั้นมีเครื่องยนต์ที่ใหม่กว่าและทันสมัยกว่า Nashorn - ฉันไม่ได้ลองกับ Nashorn แต่ฉันคิดว่ามันน่าจะคล้ายกัน


คุณสามารถขึ้นบัญชีขาวกว่าบัญชีดำได้ไหม
Petah

@Petah คุณสามารถปิดการใช้งาน (บัญชีดำ) ทุกอย่างก่อนจากนั้นจึงกดฟังก์ชั่นบางอย่างในรูปแบบของวัตถุลงในกล่องทราย นี่คือรายการที่อนุญาตพิเศษดังนั้นใช่คุณสามารถทำได้
qbd

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

2

ความคิดแรกของฉันคือ node.js - เมื่อคุณพูดถึงข้างต้นมันเป็นจาวาสคริปต์ - ล่าม และนั่นคือสิ่งที่คุณต้องการถ้าคุณต้องการแซนด์บ็อกซ์สคริปต์ด้วยวิธีที่ปลอดภัยจริงๆ

อีกวิธีหนึ่งคือคุณตรวจสอบทุกคำสั่งในสคริปต์ว่าถูกต้องหรือไม่ แต่ฉันไม่คิดว่าคุณจะได้กล่องทรายที่ปลอดภัย

ทักทาย


มี sandboxing suport i NodeJS หรือใช้กับ NodeJS หรือไม่?
ysdx

4
พบสิ่งนี้: gf3.github.com/sandbox
ysdx

+1 สำหรับลิงก์ที่ยอดเยี่ยมไปยัง "NIFTY JAVASCRIPT SANDBOX สำหรับ NODE.JS"
Jack Stone

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