자바 코드 감사 의 반 직렬 화(민감 한 정보 유출)
2107 단어 자바 코드 감사
자바 환경 에서 서로 다른 수신 역 에 있 는 구성 요소 가 데이터 통신 을 할 수 있 도록 허용 하여 수신 경 계 를 뛰 어 넘 는 데이터 전송 이 나타 납 니 다.암호 화 되 지 않 은 민감 한 데 이 터 를 직렬 화하 지 마 십시오.보안 관리 자 를 직렬 화 하 는 것 을 허용 하지 마 세 요.
public class GPSLocation implements Serializable
{
private double x; // sensitive field
private double y; // sensitive field
private String id;// non-sensitive field
// other content}
public class Coordinates
{
public static void main(String[] args)
{
FileOutputStream fout = null;
try
{
GPSLocation p = new GPSLocation(5, 2, "northeast");
fout = new FileOutputStream("location.ser");
ObjectOutputStream oout = new ObjectOutputStream(fout);
oout.writeObject(p);
oout.close();
}
catch (Throwable t)
{
// Forward to handler
}
finally
{
if (fout != null)
{
try
{
fout.close();
}
catch (IOException x)
{
// handle error
}}}}}
이 예시 코드 에서 좌표 정보 가 민감 하 다 고 가정 하면 이 를 데이터 흐름 에 서열 화하 여 민감 한 정보 유출 과 악의 적 으로 변 경 될 위험 에 직면 하 게 한다.
감사 전략
실제 업무 장면 에 따라 민감 한 데 이 터 를 정의 해 야 한다.민감 한 데이터 검색 예제 1 과 관련 된 키워드 로 확 정 된 경우.복구 방안 위의 구멍 예제 의 정확 한 작성 방법 은 다음 과 같다.
public class GPSLocation implements Serializable
{
private transient double x; // transient field will not be serialized
private transient double y; // transient field will not be serialized
private String id;
// other content
}
실제 상황 에 따라 복원 해 야 한다.일반적인 상황 에서 포 지 셔 닝 을 하면 복구 방법 은 관련 민감 한 데 이 터 를 transient 로 설명 하 는 것 입 니 다.그러면 프로그램 은 민감 한 데 이 터 를 직렬 화 형식 에서 무시 하도록 보장 합 니 다.
정확 한 예제(serialPersistentFields):
public class GPSLocation implements Serializable
{
private double x;
private double y;
private String id;// sensitive fields x and y are not content in serialPersistentFields
private static final ObjectStreamField[] serialPersistentFields = {new
ObjectStreamField("id", String.class)};
// other content
}
이 예제 에 서 는 serial PersistentFields 배열 필드 를 정의 하여 민감 한 필드 가 직렬 화 되 지 않도록 합 니 다.상기 방안 을 제외 하고 writeObject(),writeReplace(),writeExternal()등 함 수 를 사용자 정의 하여 민감 한 정 보 를 포함 하 는 필드 를 직렬 화 바이트 흐름 에 쓰 지 않 습 니 다.특수 한 상황 에서 정확하게 암호 화 된 민감 한 데 이 터 는 직렬 화 될 수 있다.