2013-08-22 3 views
1

MVC 컨트롤러에 ModelState가 유효한지 확인한 다음 모델의 인스턴스를 매개 변수로 전달하는 다른 메서드를 호출하는 간단한 게시 메서드가 있습니다. 이 모델에는 Fiddler를보고 쉽게 얻을 수있는 중요한 데이터가 들어 있습니다. 내 목표는 어떻게 든이 데이터를 마스크하거나 암호화하여 http 추적에서 볼 수 없도록하는 것입니다.데이터 전달보기 모델

나는 세션 또는 임시 변수를 사용하도록 제안하는 게시물을 보았지만 내 경우에는 옵션이 아닙니다.

[HttpPost] 
[ActionName("Search")] 
[AccessControl(Xri)] 
public ActionResult SearchPost(string string1, ViewModel model) 
{ 
     model.NoResults = false;  

     if (ModelState.IsValid) 
     { 

      if (ModelState.IsValid) return RedirectToAction("TargetAction", model);    
     } 

} 

[AccessControl(Xri)] 
public ActionResult TargetAction(string arg, ViewModel viewModel) 
{ 
. 
. 
. 
} 

피들러는 다음을 보여줍니다 :

코드가 모습입니다

/TargetAction ID = 01010101 & 날짜 = 08퍼센트 2F14 % 2F2013 %의 2천퍼센트 3A00 % 3A00 &하려면? = 08 % 2F21 % 2F2013 % 2000 % 3A00 % 3A00 & param1 = somevalue & param2 = somevalue2

여기에 표시된 URL 매개 변수를 마스크하는 방법이 있습니까?

+0

는 해당 정보를 보는 사용자와 문제인가? 아니면 누군가가 요청을 가로 채고 있습니까? – Rob

+0

둘 다. 제 업계의 규제로 인해 이러한 유형의 데이터를 누구나 볼 수 없게되었습니다. – user2708543

+0

그러면 왜 View Model의 일부입니까? 어떤 종류의 인증 토큰입니까? – Rob

답변

1

서버에서 SSL을 실행해야 할 필요가 있습니다.

신뢰할 수있는 기관의 서버 인증서가 없으면 전선을 통해 데이터를 암호화 할 수있는 방법이 거의 없습니다. 왜? 클라이언트 (아마도 자바 스크립트)가 데이터를 디코딩 할 수 있도록 데이터 보내기를 시작하기 전에 일반 텍스트로 암호화/암호 해독 세부 정보를 보내야하기 때문입니다.

인증서를 사용하고 443에서 작동하면 서버/브라우저에서 사용자 지정 구현에서 이길 수없는 기본 제공 기능이 제공됩니다.

데이터를 숨기고 (대부분의 웹 사용자의 수준을 넘어서게하려는 경우) 데이터를 암호화하는 대신 항상 base64로 인코딩 할 수 있습니다. 데이터를 암호화하지 않는다는 것과 데이터를 해독 할 수 있다는 것을 분명히하십시오.이 접근 방법은 이 아니며 형식의 암호화입니다. Client-side Encoding/Decoding MSDN Reference on Encoding to Base64

건배 :

당신이 여기에 관계없이 접근을하기로 결정하는 경우

몇 자원입니다.

0

당신은이 작업을 수행하는 두 가지 옵션이 있습니다 : 서버에

  1. 저장 데이터를 데이터를 검색하기 위해 함께 전달하는 사용자에게 토큰 (예를 들어, GUID를) 제공합니다. Session 또는 TempData를 사용하는 것은 옵션이 아니기 때문에 뷰 모델을 데이터베이스에 저장 한 다음 URL에 토큰이있는 사용자를 리디렉션하여 다음 요청에서 검색 할 수 있습니다.

  2. 다른 옵션은 사용자가 현재 수행중인 것처럼 URL에 viewmodel을 전달하지만 암호화 된 형식으로 전달하는 것입니다. 예를 들어 모델을 JSON으로 직렬화하고 .NET의 내장 암호화 알고리즘 중 하나를 사용하여 암호화 한 다음 암호화 된 문자열을보기 모델로 전달하는 다음 액션으로 리디렉션 할 수 있습니다.그런 다음 같은에 대상 작업을 변경할 수 :

 
    [AccessControl(Xri)] 
    public ActionResult TargetAction(string arg, string encryptedViewModel) 
    { 
     var decryptedString = Decrypt(encryptedViewModel) ; // supply the decrypt function to match your encryption 
     var viewModel = JsonConvert.DeserializeObject(decryptedString); 
    } 
+0

옵션 # 2는 훌륭하게 작동하지만 "깨끗한"솔루션을 찾고 있습니다. 나는 그것이 존재 하는지를 모른다. 그러나 그것은 묻지 않는다. 한가지 언급 할 필요가 있지만 사내 세션 관리자 클래스를 사용할 수 있습니다. 예를 들어, – user2708543

+0

은 모델에서 인코딩하고자하는 데이터에 태그를 달아서 추적 할 필요가 없으며 일반 텍스트로 표시되지 않도록 할 수 있습니까? – user2708543

+0

이것은 달성하고자하는 것입니다. Model.cs : 공개 클래스 someClass { [EncryptMe] public string userID {get; } } EncryptMe 속성이 양식을 포매팅하기 전에 데이터를 어떻게 든 마스크하는 위와 같이 모델을 만들 수 있습니까? – user2708543