Tôi đang làm việc trên react-metaform và một trong những thách thức của tôi là tôi cần cho phép người dùng cuối xác định siêu dữ liệu dưới dạng hàm. Ví dụ:Làm cách nào để kiểm tra xem hàm có phải là hàm thuần túy không?
socialSecurityNumber.required: (m) => m.type == 'person'
Vấn đề là hiển nhiên: Tôi không thể tin tưởng người dùng. Vì vậy, đây là những biện pháp phòng ngừa tôi đang lập kế hoạch để thực hiện:
- chức năng người dùng định nghĩa nên chức năng tinh khiết. Theo nghĩa đó, các chức năng này chỉ có thể truy cập thông số của chúng, không có gì khác.
- Các hàm do người dùng định nghĩa sẽ chạy trong môi trường có khả năng đàn hồi ngoại lệ, thời gian thực thi quá dài và vòng lặp vô hạn. (Tôi không lo lắng về điều này ngay bây giờ).
Câu hỏi đặt ra là: Làm cách nào để đảm bảo chức năng do người dùng xác định chỉ truy cập vào thông số và không có gì khác?
tôi sẽ giả định đặt cược tốt nhất của bạn để xác định ngôn ngữ biểu hiện của riêng bạn mà được phân tách và sau đó được đánh giá trên các đối tượng thực tế của bạn, thay vì sử dụng 'hàm mới'. – Bergi
http://stackoverflow.com/questions/14889393/how-to-run-a-javascript-function-in-a-sandbox-environment – epascarello
Tôi nghĩ từ lúc bạn yêu cầu người dùng viết JS và thực hiện nó bạn được thực hiện khá nhiều. Bạn không thể ngăn chặn thời gian thực hiện lâu dài (chạy-to-hoàn thành, yeah!) Hoặc đảm bảo rằng các chức năng là tinh khiết (có thể với bóng lớn thông qua các thông số, nhưng đó sẽ là lạ). –