Tôi thích ý tưởng "mã dưới dạng dữ liệu" cho cấu hình, vì xác thực bạn nhận được từ các lớp chữ thường là xác thực giống như bạn muốn cho một tệp cấu hình. Twitter đã viết một tiện ích đánh giá tốt đẹp mà làm cho điều này dễ dàng (https://github.com/twitter/util). Tôi muốn cho phép người dùng tải tệp cấu hình lên dịch vụ từ xa. Điều đó mở ra tiềm năng để tiêm mã chống lại dịch vụ từ xa của tôi.Làm cách nào để bạn có thể buộc Scala Eval của Twitter ngăn chặn mã tiêm? Tôi muốn giới hạn Eval để chỉ định các tham số cấu hình
Ví dụ, nếu tôi có lớp trường hợp cấu hình sau:
case class MyConfig(param1: String)
tôi muốn người dùng có thể tải lên một tập tin có chứa các lệnh:
MyConfig(param1 = "My Param Value")
... nhưng không phải tệp có chứa lệnh:
MyConfig(param1 = {import someDangerousPackage; someDangerousCommand(); "My Param Value"})
Có cách nào để chặn việc biên dịch để đảm bảo không chức năng đang được gọi?
Nếu bạn đã có các lớp vỏ, tại sao bạn không chỉ sử dụng cấu hình typesafe cho tệp cấu hình và giải nén nó từ đó? – drexin
hãy xem http://code.google.com/p/scalascriptengine/ Tôi nghĩ rằng chúng cung cấp một số tùy chọn bảo mật cơ bản – vitalii
Nếu tôi tạo và xác thực cá thể lớp chữ bằng tệp Cấu hình Typesafe HOCON, thì số dòng của tôi sẽ phản ánh trường hợp được tạo ra, không phải là HOCON ban đầu - trừ khi tôi hiểu sai cách tiếp cận ... –