2016-08-22 11 views
7

Sadece Akışları ve Java 8 Lambda işlevselliği üzerinden gidiyor, aksi takdirde kendi kendini açıklayıcı Oracle doküman üzerinde son yorum Lambda Expressions devletler:Bir lambda ifadesinin serileştirilmesindeki güvenlik riskleri nelerdir?

Bunu hedef türü ise lambda ifade serileştirebilirsiniz ve yakalanan argümanlar seri hale getirilebilir . Ancak, iç sınıflar gibi, lambda ifadelerinin serileştirilmesi kesinlikle önerilmez.

bu kadar denetleniyor Ben OP istemci kodundan tefrika lambda ifadeleri ile uğraşan nerede SO

How to serialize a lambda?

soru bulundu.

Bir web hizmetim vardı ve parametrelerden biri bir lambda ifadesiyse, dosya sistemi erişimi gibi şeyler yapabilen veya yığın taşmasına neden olabilecek kötü amaçlı kod içerebileceği görünüyor - bu nedenle güvenmek oldukça aptalca olurdu o.

Güvenlik riskini aşırı derecede büyütüyor muyum, yoksa serileştirilmiş ifadenin içerebileceği sınırlar var mı?

+1

Bir örnek için [bu soru] bölümüne bakın (http://stackoverflow.com/questions/25443655/possibility-to-explicit-remove-serialization-support-for-a-lambda). Daha önce belirtmiş olduğunuz gibi, iç sınıflar da benzer bir konu açabilir. Yine de, bir webservice bağlamında bir lambda ifadesini nasıl aktardığınızdan emin değilim. – Holger

+1

Netleştirmek için, bir lambda ifadesini serileştirmek, ifadenin içindeki kodu serileştirmez; sadece ele geçirilen argümanlar gibi şeyler. –

cevap

4

Bunu şu şekilde ayarlamanızı sağlar: Java nesne serileştirmesi zaten bir güvenlik kabusudur (örneğin, here örneğine bakın). Diğer bir deyişle: serileştirme tek başına bir düşüncenin gerçekten ilk başta düşünülmesi gereken bir konudur. Bu yüzden, seri hale getirilmiş lambdalardan veya başka türden serileştirilmiş nesnelerden bahsederseniz gerçekten farketmez. Örneğin, CERT gibi ilgili kuralları anladığınızdan ve desteklediğinizden emin olmak istiyorsanız, örneğin. Oracle önerilerin

3

Bir Java SE için Kodlama Rehberleri Güvenli

Esasen

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

olduğunu kurucu bağımsız uygulanacak aynısını doğrulama kontrolleri de gelen uygulanması gerektiğini serileştirilmiş veri. Bu, validasyonu gerçekleştiren bir readObject yöntemi sağlayarak sıradan nesneler için yapılabilir. Ancak, seri hale getirilmiş lambdalar için bir readObject yöntemi temin etmek NOT DEĞİLDİR, bu nedenle bir lambda için seri hale getirilmiş verilerin herhangi bir doğrulamasını gerçekleştirmek mümkün değildir.

Seri hale getirilmiş lambdalar, tüm güvenlik risklerini sıradan nesnelerin serileştirilmesiyle paylaşırlar, ancak bu açıdan serileştirilmiş lambdalar, sıradan serileştirilebilir nesnelerden daha geniş güvenlik risklerine maruz kalır.