Complex Bean DeSerialization

Google-gson is a java library from Google for encoding and decoding JSON text. Get the latest binaries fromhttp://code.google.com/p/google-gson/. The following example shows converting a Complex bean to JSON string and vice versa.


package com.bethecoder.tutorials.google_gson.common;

import java.util.Date;

public class Student {
  private String firstName;
  private String lastName;
  private int age;
  private String hobby;
  private Date dob;

  public Student(String firstName, String lastName, int age, String hobby,
      Date dob) {
    super();
    this.firstName = firstName;
    this.lastName = lastName;
    this.age = age;
    this.hobby = hobby;
    this.dob = dob;
  }
  
  public String getFirstName() {
    return firstName;
  }
  public void setFirstName(String firstName) {
    this.firstName = firstName;
  }
  public String getLastName() {
    return lastName;
  }
  public void setLastName(String lastName) {
    this.lastName = lastName;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  public String getHobby() {
    return hobby;
  }

  public void setHobby(String hobby) {
    this.hobby = hobby;
  }
  public Date getDob() {
    return dob;
  }
  public void setDob(Date dob) {
    this.dob = dob;
  }

  public String toString() {
    return "Student[ " +
      "firstName = " + firstName +
      ", lastName = " + lastName +
      ", age = " + age +
      ", hobby = " + hobby +
      ", dob = " + dob +
      " ]";
  }
}

package com.bethecoder.tutorials.google_gson.common;

import java.util.ArrayList;
import java.util.List;

public class StudentClass {

  private String name;
  private List<String> subjects = new ArrayList<String>();
  private List<Student> students = new ArrayList<Student>();
  
  public StudentClass(String name) {
    super();
    this.name = name;
  }

  public String getName() {
    return name;
  }
  
  public void setName(String name) {
    this.name = name;
  }
  
  public List<String> getSubjects() {
    return subjects;
  }
  
  public void setSubjects(List<String> subjects) {
    this.subjects = subjects;
  }
  
  public List<Student> getStudents() {
    return students;
  }
  
  public void setStudents(List<Student> students) {
    this.students = students;
  }
  
}


package  com.bethecoder.tutorials.google_gson.tests;

import  java.util.Arrays;
import  java.util.Date;

import  com.bethecoder.tutorials.google_gson.common.Student;
import  com.bethecoder.tutorials.google_gson.common.StudentClass;
import  com.google.gson.Gson;
import  com.google.gson.GsonBuilder;

public class  ComplexBeanDeSerializationTest  {

   /**
    @param  args
    */
   public static  void  main ( String []  args ) {
     Gson gson =  new  GsonBuilder () .setPrettyPrinting () .create () ;

     StudentClass stdCls =  new  StudentClass ( "MPC" ) ;
     stdCls.getSubjects () .addAll ( Arrays.asList ( "Maths" "Physics" "Chemistry" )) ;
     stdCls.getStudents () .add (
         new  Student ( "Sriram" "Kasireddi" 2 "Singing" new  Date ( 110 4 6 ))) ;  
     stdCls.getStudents () .add (
         new  Student ( "Sudhakar" "Kasireddi" 29 "Singing" new  Date ( 82 8 6 ))) ;  
    
     String jsonStr = gson.toJson ( stdCls ) //Serialize
     System.out.println ( jsonStr ) ;
    
     stdCls = gson.fromJson ( jsonStr, StudentClass. class ) //Deserialize
     System.out.println ( "Name : "  + stdCls.getName ()) ;
     System.out.println ( "Subjects : "  + stdCls.getSubjects ()) ;
     System.out.println ( "Students : "  + stdCls.getStudents ()) ;
   }

}




output:


### 回答1: Unsafe Deserialization,也称为反序列化漏洞,是一种安全漏洞,其发生在应用程序中的数据反序列化过程中。简单来说,当应用程序从外部数据源(例如网络或文件)接收序列化对象并尝试将其还原为原始对象时,如果未正确验证和过滤输入数据,攻击者可以将恶意代码注入反序列化流中,从而导致应用程序执行不受控制的操作。这可能会导致数据泄露、拒绝服务攻击、远程执行代码等安全问题。 ### 回答2: Unsafe Deserialization(不安全的反序列化)是指在编程语言中的反序列化过程中出现风险的情况。反序列化是将之前序列化为数据流的对象重新转换为对象的过程。在这个过程中,程序会将数据流转换为内存中的对象,在此过程中,可能存在潜在的安全问题。 反序列化的过程中,程序会根据数据流中的内容来创建对象,并将对象的状态恢复为序列化之前的状态。然而,如果攻击者能够在数据流中插入恶意代码,就可能导致安全漏洞。这种攻击方式被称为反序列化攻击。 反序列化攻击通常通过传递经过篡改的数据流来实现,攻击者可能利用漏洞来执行恶意代码,例如远程代码执行、拒绝服务攻击等。攻击者可以通过构造恶意的序列化数据来触发漏洞,从而获取未经授权的访问权限或者执行未经授权的操作。 为了防止Unsafe Deserialization攻击,开发人员可以采取一些预防措施。例如,使用白名单来限制反序列化的类、字段和方法,以防止执行恶意代码。另外,对于不可信的数据流,可以使用加密、签名或者其他验证机制来确保数据的完整性和安全性。 总之,Unsafe Deserialization是指在反序列化过程中存在潜在的安全隐患,攻击者可能通过构造恶意的序列化数据来执行未经授权的操作。开发人员应该采取预防措施来保护应用程序免受此类攻击。 ### 回答3: Unsafe Deserialization(不安全的反序列化)是指在程序中反序列化数据时存在的安全漏洞。反序列化是将存储在文件或网络中的序列化数据转换为可操作的对象的过程。然而,如果反序列化过程没有适当的安全措施,攻击者可能利用这个漏洞来执行恶意代码或实现其他恶意行为。 Unsafe Deserialization的安全问题主要出现在未对反序列化数据进行充分验证和过滤的情况下。攻击者可以通过构造精心设计的恶意数据,改变其原始目的,以实现各种攻击目标。例如,攻击者可能通过篡改序列化数据来执行远程代码执行(Remote Code Execution)攻击,获取系统权限,并在目标系统上执行任意的恶意操作,如数据盗取、篡改或删除。 为了防止Unsafe Deserialization漏洞,开发人员可以采取以下措施: 1. 使用安全的序列化库:选择可信赖的序列化库,例如JSON,它提供了很多安全特性,并且有很好的社区支持。 2. 输入验证和过滤:对反序列化的输入数据进行严格的验证和过滤,确保只接受符合预期数据结构的数据。 3. 加强访问控制:仅允许受信任的类进行反序列化操作,并禁止反序列化敏感数据。 4. 使用白名单:定义合法的序列化类和对象,将所有其他类和对象视为不受信任,从而限制攻击者能够注入恶意代码的可能性。 5. 更新和修补:及时应用安全补丁和更新,以修复已知的安全漏洞。 总之,Unsafe Deserialization是一种可能导致严重安全问题的漏洞,需要开发人员在编写反序列化代码时采取适当的安全措施来防范和修复。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值