2009-08-25 2 views
3

다음과 같이 C# 클래스가 있습니다.C#에서 개체를 serialize하고 변조를 방지하는 방법?

public class TestObj 
{ 
    private int intval; 
    private string stringval; 
    private int[] intarray; 
    private string[] stringarray; 

    //... public properties not shown here 
} 

이 클래스의 인스턴스를 문자열로 serialize하고자합니다.

추가 :

이 문자열을 QueryString 매개 변수로 URL에 추가합니다. 그래서 문자열을 쉽게 조작 할 수 없도록 노력하고 싶습니다.

또한 직렬화 방법이 효율적이어서 문자열의 크기가 minmal입니다.

특정 .NET Framework 클래스/메서드에 대한 제안 사항을 사용해야합니까?

답변

4

1) 직렬화하려면

  • 비밀 문자열, 예를 들어, 함께 가자 :

    public String SerializeObject(TestObj object) 
    { 
         String Serialized = String.Empty; 
         MemoryStream memoryStream = new MemoryStream (); 
         XmlSerializer xs = new XmlSerializer(typeof(TestObj)); 
         XmlTextWriter xmlTextWriter = new XmlTextWriter (memoryStream, Encoding.UTF8); 
         xs.Serialize (xmlTextWriter, object); 
         memoryStream = (MemoryStream) xmlTextWriter.BaseStream; 
         Serialized = UTF8Encoding.GetString(memoryStream.ToArray()); 
         return Serialized; 
    } 
    

    2) 침해를 방지하기 위해 "MySecretWord".

  • 직렬화 된 객체 인스턴스를 문자열로 가져 와서 비밀 단어를 추가하십시오.
  • 해시 문자열 또한 "MySecretWord"비밀을 알고있는 (수신 측에 쿼리 문자열

에 해시를 추가

  • (예를 들어, SHA 또는 레무스에 의해 제안)을 HMAC를 (사용) 문자열)을 사용하면 해시를 제거하고 원래 직렬화 된 인스턴스를 가져 와서 알려진 비밀 문자열을 추가하고 다시 해시 할 수 있습니다. 그런 다음 두 해시가 동일한 지 비교합니다. 동등한 경우 문자열이 수정되지 않았습니다.

    Url/Base64 문자열을 인코딩해야 쿼리 문자열로 사용할 수 있습니다. 이는 전송 된 것과 정확히 일치하도록 쿼리 문자열을 필요로 할 때도 중요합니다.

  • +0

    이 문제는 대상과의 공유 또는 업데이트를 처리하지 못한다는 것입니다. 아마도 그가 변조를 방지하기를 원한다면 다른 측은 잘못된 값을 검사하는 방법을 알아야 할 것입니다. 또한 그가 예측 가능한 비밀을 사용하면 누군가가 객체를 조작하고 해시를 다시 계산할 수 있습니다. – Omniwombat

    +0

    바퀴를 다시 열지 마십시오. CLR은 적절한 암호 작성자가 검토 한 HMAC 서명을 상자에서 즉시 제공합니다. –

    +1

    @Onniwombat : 이것은 정보의 쿼리 문자열 전송을 다루기 때문에 확실히 높은 보안 시나리오는 아닙니다. 비밀의 순수한 존재는 어떤 '공격자'라도 버릴 것이다. 또한 해시 솔루션을 보안 요구 사항까지 확장 할 수 있도록 무기한으로 선택 될 수 있지만이 경우에는 줄 전체의 문자열을 암호화합니다. 어느 쪽이든, 변조 방지를 위해 목적지에 액세스해야합니다. – Alex

    4

    스트림에 서명하고 쿼리에 서명을 추가하십시오. HMACSHA1과 같은 HMAC 서명 알고리즘을 사용하십시오. 서명하고 서명을 확인하려면 클라이언트와 서버 사이에 비밀이 있어야합니다.

    관련 문제