Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit fe6a257

Browse files
author
Nikita Koksharov
committed
Feature - allowedClasses setting added to SerializationCodec https://github.com/redisson/redisson/security/code-scanning/4
1 parent c70943b commit fe6a257

2 files changed

Lines changed: 31 additions & 16 deletions

File tree

redisson/src/main/java/org/redisson/codec/CustomObjectInputStream.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,11 @@
1515
*/
1616
package org.redisson.codec;
1717

18-
import java.io.IOException;
19-
import java.io.InputStream;
20-
import java.io.ObjectInputStream;
21-
import java.io.ObjectStreamClass;
18+
import java.io.*;
2219
import java.lang.reflect.Proxy;
2320
import java.util.ArrayList;
2421
import java.util.List;
22+
import java.util.Set;
2523

2624
/**
2725
*
@@ -31,7 +29,14 @@
3129
public class CustomObjectInputStream extends ObjectInputStream {
3230

3331
private final ClassLoader classLoader;
34-
32+
private Set<String> allowedClasses;
33+
34+
public CustomObjectInputStream(ClassLoader classLoader, InputStream in,Set<String> allowedClasses) throws IOException {
35+
super(in);
36+
this.classLoader = classLoader;
37+
this.allowedClasses = allowedClasses;
38+
}
39+
3540
public CustomObjectInputStream(ClassLoader classLoader, InputStream in) throws IOException {
3641
super(in);
3742
this.classLoader = classLoader;
@@ -41,6 +46,9 @@ public CustomObjectInputStream(ClassLoader classLoader, InputStream in) throws I
4146
protected Class<?> resolveClass(ObjectStreamClass desc) throws IOException, ClassNotFoundException {
4247
try {
4348
String name = desc.getName();
49+
if (allowedClasses != null && !allowedClasses.contains(name)) {
50+
throw new InvalidClassException("Class " + name + " isn't allowed");
51+
}
4452
return Class.forName(name, false, classLoader);
4553
} catch (ClassNotFoundException e) {
4654
return super.resolveClass(desc);
@@ -56,7 +64,7 @@ protected Class<?> resolveProxyClass(String[] interfaces) throws IOException, Cl
5664
loadedClasses.add(clazz);
5765
}
5866

59-
return Proxy.getProxyClass(classLoader, loadedClasses.toArray(new Class[loadedClasses.size()]));
67+
return Proxy.getProxyClass(classLoader, loadedClasses.toArray(new Class[0]));
6068
}
6169

6270
}

redisson/src/main/java/org/redisson/codec/SerializationCodec.java

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,19 @@
1515
*/
1616
package org.redisson.codec;
1717

18-
import java.io.IOException;
19-
import java.io.ObjectInputStream;
20-
import java.io.ObjectOutputStream;
21-
18+
import io.netty.buffer.ByteBuf;
19+
import io.netty.buffer.ByteBufAllocator;
20+
import io.netty.buffer.ByteBufInputStream;
21+
import io.netty.buffer.ByteBufOutputStream;
2222
import org.redisson.client.codec.BaseCodec;
2323
import org.redisson.client.handler.State;
2424
import org.redisson.client.protocol.Decoder;
2525
import org.redisson.client.protocol.Encoder;
2626

27-
import io.netty.buffer.ByteBuf;
28-
import io.netty.buffer.ByteBufAllocator;
29-
import io.netty.buffer.ByteBufInputStream;
30-
import io.netty.buffer.ByteBufOutputStream;
27+
import java.io.IOException;
28+
import java.io.ObjectInputStream;
29+
import java.io.ObjectOutputStream;
30+
import java.util.Set;
3131

3232
/**
3333
* JDK's serialization codec.
@@ -51,7 +51,7 @@ public Object decode(ByteBuf buf, State state) throws IOException {
5151
ObjectInputStream inputStream;
5252
if (classLoader != null) {
5353
Thread.currentThread().setContextClassLoader(classLoader);
54-
inputStream = new CustomObjectInputStream(classLoader, in);
54+
inputStream = new CustomObjectInputStream(classLoader, in, allowedClasses);
5555
} else {
5656
inputStream = new ObjectInputStream(in);
5757
}
@@ -84,7 +84,8 @@ public ByteBuf encode(Object in) throws IOException {
8484
}
8585
}
8686
};
87-
87+
88+
private Set<String> allowedClasses;
8889
private final ClassLoader classLoader;
8990

9091
public SerializationCodec() {
@@ -97,6 +98,12 @@ public SerializationCodec(ClassLoader classLoader) {
9798

9899
public SerializationCodec(ClassLoader classLoader, SerializationCodec codec) {
99100
this.classLoader = classLoader;
101+
this.allowedClasses = codec.allowedClasses;
102+
}
103+
104+
public SerializationCodec(ClassLoader classLoader, Set<String> allowedClasses) {
105+
this.classLoader = classLoader;
106+
this.allowedClasses = allowedClasses;
100107
}
101108

102109
@Override

0 commit comments

Comments
 (0)