Eval là bổ sung cho việc biên dịch được sử dụng trong việc tạo khuôn mã. Bằng cách tạo khuôn mẫu, tôi có nghĩa là bạn viết một trình tạo mẫu đơn giản hóa để tạo mã mẫu hữu ích giúp tăng tốc độ phát triển.
Tôi đã viết một khung, trong đó các nhà phát triển không sử dụng EVAL, nhưng họ sử dụng khung của chúng tôi và đến lượt khung đó phải sử dụng EVAL để tạo mẫu.
Hiệu suất của EVAL có thể được tăng lên bằng cách sử dụng phương pháp sau; thay vì thực thi tập lệnh, bạn phải trả về một hàm.
var a = eval("3 + 5");
Nó nên được tổ chức như
var f = eval("(function(a,b) { return a + b; })");
var a = f(3,5);
Bộ nhớ đệm f chắc chắn sẽ cải thiện tốc độ.
Ngoài ra Chrome cho phép gỡ lỗi các chức năng như vậy rất dễ dàng.
Về bảo mật, sử dụng eval hay không sẽ khó tạo ra sự khác biệt nào,
- Trước hết, trình duyệt gọi toàn bộ tập lệnh trong hộp cát.
- Bất kỳ mã nào là xấu trong EVAL, là xấu trong chính trình duyệt. Kẻ tấn công hoặc bất kỳ ai cũng có thể dễ dàng chèn một nút script trong DOM và làm bất cứ điều gì nếu anh ta / cô ta có thể đánh bại bất cứ điều gì. Không sử dụng EVAL sẽ không làm cho bất kỳ sự khác biệt.
- Nó chủ yếu là bảo mật phía máy chủ kém có hại. Xác thực cookie kém hoặc triển khai ACL kém trên máy chủ gây ra hầu hết các cuộc tấn công.
- Một lỗ hổng Java gần đây, v.v. đã có trong mã gốc của Java. JavaScript đã và được thiết kế để chạy trong hộp cát, trong khi các applet được thiết kế để chạy bên ngoài hộp cát có chứng chỉ, v.v ... dẫn đến lỗ hổng và nhiều thứ khác.
- Viết mã để bắt chước một trình duyệt không khó. Tất cả bạn phải làm là thực hiện một yêu cầu HTTP đến máy chủ với chuỗi tác nhân người dùng yêu thích của bạn. Tất cả các công cụ kiểm tra giả lập trình duyệt nào; nếu kẻ tấn công muốn làm hại bạn, EVAL là biện pháp cuối cùng của họ. Họ có nhiều cách khác để đối phó với bảo mật phía máy chủ của bạn.
- DOM trình duyệt không có quyền truy cập vào tệp và không có tên người dùng. Trong thực tế không có gì trên máy mà eval có thể cung cấp quyền truy cập.
Nếu bảo mật phía máy chủ của bạn đủ vững chắc để bất cứ ai tấn công từ bất cứ đâu, bạn không nên lo lắng về EVAL. Như tôi đã đề cập, nếu EVAL không tồn tại, kẻ tấn công có nhiều công cụ để xâm nhập vào máy chủ của bạn bất kể khả năng EVAL của trình duyệt của bạn.
Eval chỉ tốt khi tạo một số mẫu để xử lý chuỗi phức tạp dựa trên thứ gì đó không được sử dụng trước. Ví dụ, tôi sẽ thích
"FirstName + ' ' + LastName"
Như trái ngược với
"LastName + ' ' + FirstName"
Như tên hiển thị của tôi, có thể đến từ cơ sở dữ liệu và không được mã hóa cứng.