Eval เป็นส่วนเสริมของการคอมไพล์ซึ่งใช้ในการสร้างรหัสเทมเพลต โดยการสร้างเทมเพลตฉันหมายความว่าคุณเขียนเทมเพลตที่เรียบง่ายซึ่งสร้างโค้ดเทมเพลตที่มีประโยชน์ซึ่งจะช่วยเพิ่มความเร็ว
ฉันได้เขียนเฟรมเวิร์กโดยที่นักพัฒนาไม่ได้ใช้ EVAL แต่พวกเขาใช้เฟรมเวิร์กของเราและในที่สุดเฟรมเวิร์กก็ต้องใช้ EVAL เพื่อสร้างเทมเพลต
ประสิทธิภาพของ EVAL สามารถเพิ่มขึ้นได้โดยใช้วิธีการต่อไปนี้ แทนที่จะเรียกใช้สคริปต์คุณต้องส่งคืนฟังก์ชัน
var a = eval("3 + 5");
มันควรจะจัดเป็น
var f = eval("(function(a,b) { return a + b; })");
var a = f(3,5);
การแคชจะปรับปรุงความเร็วอย่างแน่นอน
Chrome ยังสามารถแก้ไขข้อบกพร่องของฟังก์ชั่นดังกล่าวได้อย่างง่ายดาย
เกี่ยวกับความปลอดภัยการใช้ eval หรือไม่สร้างความแตกต่าง
- ก่อนอื่นเบราว์เซอร์จะเรียกใช้สคริปต์ทั้งหมดในแซนด์บ็อกซ์
- รหัสใด ๆ ที่เป็นความชั่วร้ายใน EVAL เป็นความชั่วร้ายในเบราว์เซอร์เอง ผู้โจมตีหรือใครก็ตามสามารถฉีดโหนดสคริปต์ใน DOM ได้อย่างง่ายดายและทำทุกอย่างถ้าเขา / เธอสามารถทำอะไรได้ การไม่ใช้ EVAL จะไม่สร้างความแตกต่างใด ๆ
- การรักษาความปลอดภัยฝั่งเซิร์ฟเวอร์ส่วนใหญ่นั้นเป็นอันตราย การตรวจสอบคุกกี้ที่ไม่ดีหรือการใช้งาน ACL ที่ไม่ดีบนเซิร์ฟเวอร์ทำให้เกิดการโจมตีส่วนใหญ่
- ช่องโหว่ Java ล่าสุดและอื่น ๆ มีอยู่ในโค้ดเนทีฟของ Java JavaScript นั้นถูกออกแบบมาให้ทำงานในแซนด์บ็อกซ์ในขณะที่แอปเพล็ตถูกออกแบบมาให้ทำงานนอกแซนด์บ็อกซ์พร้อมใบรับรอง ฯลฯ ซึ่งนำไปสู่ช่องโหว่และสิ่งอื่น ๆ อีกมากมาย
- การเขียนโค้ดเพื่อเลียนแบบเบราว์เซอร์นั้นไม่ยาก สิ่งที่คุณต้องทำคือส่งคำขอ HTTP ไปยังเซิร์ฟเวอร์ด้วยสตริงตัวแทนผู้ใช้ที่คุณชื่นชอบ เครื่องมือทดสอบทั้งหมดจำลองเบราว์เซอร์ไว้แล้ว หากผู้โจมตีต้องการทำร้ายคุณ EVAL เป็นทางเลือกสุดท้ายของพวกเขา พวกเขามีวิธีอื่น ๆ ในการจัดการกับความปลอดภัยฝั่งเซิร์ฟเวอร์ของคุณ
- DOM เบราว์เซอร์ไม่สามารถเข้าถึงไฟล์และไม่ใช่ชื่อผู้ใช้ อันที่จริงไม่มีอะไรในเครื่องที่ eval สามารถเข้าถึงได้
หากการรักษาความปลอดภัยฝั่งเซิร์ฟเวอร์ของคุณมั่นคงเพียงพอสำหรับทุกคนที่จะถูกโจมตีจากทุกที่คุณไม่ควรกังวลเกี่ยวกับ EVAL อย่างที่ฉันได้กล่าวไปแล้วว่าถ้าไม่มี EVAL ผู้โจมตีจะมีเครื่องมือมากมายที่จะแฮ็คเข้าสู่เซิร์ฟเวอร์ของคุณ
Eval นั้นดีสำหรับการสร้างเทมเพลตบางตัวเพื่อทำการประมวลผลสตริงที่ซับซ้อนตามสิ่งที่ไม่ได้ใช้ล่วงหน้า ตัวอย่างเช่นฉันจะชอบ
"FirstName + ' ' + LastName"
ตรงข้ามกับ
"LastName + ' ' + FirstName"
เป็นชื่อที่แสดงของฉันซึ่งสามารถมาจากฐานข้อมูลและไม่ได้ hardcoded