2016-08-22 15 views
7

Chỉ cần đi qua Streams và Java 8 Lambda chức năng, và những nhận xét cuối cùng trên khác tự giải thích Oracle doc Lambda Expressions trạng thái:Rủi ro bảo mật trong tuần tự hóa biểu thức lambda là gì?

Bạn có thể serialize một biểu thức lambda nếu loại mục tiêu của mình và đối số của nó bị bắt là serializable . Tuy nhiên, giống như các lớp bên trong, việc tuần tự hóa các biểu thức lambda không được khuyến khích mạnh mẽ.

Kiểm tra lên trên này tôi thấy SO câu hỏi

How to serialize a lambda?

nơi OP là đối phó với các biểu thức lambda serialized từ mã khách hàng.

Nếu tôi có webservice và một tham số là biểu thức lambda, có vẻ như mã có thể chứa mã độc hại có thể làm những việc như truy cập hệ thống tệp hoặc gây tràn ngăn xếp - vì vậy sẽ rất ngu ngốc để tin tưởng nó.

Tôi có phóng đại quá mức nguy cơ bảo mật hoặc có giới hạn đối với biểu thức được tuần tự hóa có thể chứa không?

+1

Xem [câu hỏi này] (http://stackoverflow.com/questions/25443655/possibility-to-explicit-remove-serialization-support-for-a-lambda) để biết ví dụ. Như đã được chỉ ra trong trích dẫn của bạn, các lớp bên trong có thể mở ra một vấn đề tương tự. Tôi không hoàn toàn chắc chắn, làm thế nào bạn chuyển một biểu thức lambda trong bối cảnh của một webservice, mặc dù. – Holger

+1

Chỉ cần làm rõ, tuần tự hóa một biểu thức lambda không tuần tự hóa mã bên trong biểu thức; chỉ những thứ như đối số bị bắt. –

Trả lời

4

Cho phép đặt theo cách này: Tuần tự hóa đối tượng Java là (ở một mức độ nhất định) là một cơn ác mộng về bảo mật (xem ví dụ here).

Nói cách khác: serialization tự nó là một chủ đề mà người ta cần phải thực sự chu đáo ngay từ đầu. Vì vậy, nó không thực sự quan trọng nếu bạn nói về lambdas serialized, hoặc bất kỳ loại khác của các đối tượng serialized.

Vì vậy, ví dụ: bạn muốn đảm bảo rằng bạn hiểu và hỗ trợ các quy tắc tương ứng, như từ CERT.

3

Một trong những khuyến nghị trong Oracle Bảo Nguyên tắc mã cho Java SE là

Guideline 8-3/SERIAL-3: View deserialization the same as object construction

Về cơ bản, kiểm tra xác nhận tương tự mà sẽ được áp dụng cho đối số nhà xây dựng cũng nên được áp dụng cho đến dữ liệu deserialized. Điều này có thể thực hiện đối với các đối tượng thông thường bằng cách cung cấp phương thức readObject để thực hiện xác thực. Tuy nhiên, nó là NOT có thể cung cấp phương thức readObject cho lambdas được tuần tự hóa, do đó không thể thực hiện bất kỳ xác thực dữ liệu tuần tự nào cho lambda.

Các lambda được tuần tự hóa chia sẻ tất cả các rủi ro bảo mật với việc tuần tự hóa các đối tượng thông thường, nhưng trong trường hợp này, các lambdas được tuần tự phải chịu rủi ro bảo mật lớn hơn các đối tượng tuần tự bình thường.

Các vấn đề liên quan