2011-07-06 2 views
19

viewstate 암호화를 켜려고합니다. IIS6에서 호스팅되는 ASP.NET 3.5 웹 사이트의 보안 수단으로 항상을 사용하십시오. viewstate가 꺼져 있지만이 문자열에는 여전히 "controlstate"가 표시됩니다. 테스트 환경에서 나는 단지의 Web.config에 다음을 설정할 수와 나는 더 이상 64 기수 반 일반 텍스트로 viewstate가 디코딩 할 수 있습니다asp.net viewstate 암호화 문제

<pages enableViewState="false" enableViewStateMac="true" viewStateEncryptionMode="Always">

은 심지어 추가를 다음 (machine key generater에 의해 genereated) 은 Machine.config 여전히 내 테스트 서버에서 viewstate가 벌금을 암호화하기 :

<machineKey validationKey="002..." decryptionKey="D90E..." validation="SHA1" decryption="AES" />

내 비 테스트 환경은 일반 텍스트로 내가 할 수있는 항상 base64로 디코딩과 viewstate가 위의 변경 사항을 적용하지 않는 것 위의 설정으로 나는 언제나 내가 어떤 변화를 한 후에 나는 iisreset.

내 비 테스트 웹 서버에 대한 몇 가지 정보 :

  • 웹 농장/부하 분산 (하지만 지금 테스트를위한 하나 개의 서버까지)는
  • 는 SQL 세션 상태는 (은 Machine.config에서 machinekey는 처음 필요했다)이 설정하는
  • 은 Machine.config : 배포 소매 = asp.net의 viewstate가 암호화를 방해 할 수 추가 설정을 찾아 위치를

누구나 제안 할 수 있습니다 "true"로?

EDIT : 이제 iis 테스트 서버에서 viewStateEncryptionMode 설정을 취소 할 수 없습니다.이 설정을 "Never"로 설정하고 다른 웹 사이트 중 아무 것도이 설정을 유지하지 않는 경우에도 viewstate를 암호화합니다. 이 속성이 무시되는 위치를 어디에서 볼 수 있습니까? 이 설정이 저장되는 캐시가 있습니까? iisreset/stop www service/touch machine.config 때 수행해야 할 것 이외에 지울 필요가 있습니까?

EDIT FINAL : 설정 파일을 공부 한 후에 코드를 통해이를 포기하고 구현했습니다. 페이지 이벤트에 추가하는 보안 모듈이 이미 있으므로 Page_Load에 추가되었습니다. Page.RegisterRequiresViewStateEncryption();

저는 IIS6 immediatley에서이 설정을 막지 못하는 것이 무엇인지 알고 싶습니다. 내가 언제 내가 viewexate를 인코딩하고 id = "__ VIEWSTATEENCRYPTED"로 추가 숨겨진 필드를 렌더링하는지 즉시 볼 수있는 페이지 노드를 통해 viewStateEncryptionMode를 "Always"로 설정하면 cassini를 로컬에서 실행할 때. "Never"로 설정하면 즉시 암호화가 꺼지는 것을 볼 수 있습니다. IIS6 호스팅 웹 사이트에서 웹 사이트를 똑같이 변경하면 즉시 영향을 미치지 않지만 설정을 그대로 유지하면 결국 유지됩니다. 나는 www 서비스를 멈추고/시작하고 iis를 재설정하고 ASPNET 임시 캐시를 지우 겠지만 그 밖에 무엇을 시도해야할지 모르겠다. 잘만되면이 게시물은 잠시 동안 ROT 할 수 있고, 앞으로 누군가는 내가 경험했던 것과 똑같은 행동을 보게 될 것이고 우리는 이것을 더 알아낼 수있을 것입니다!

+5

RegisterRequiresViewStateEncryption도 내 web.config에서 명시 적으로 false로 설정 했음에도 불구하고 ViewstateMAC 유효성 검사를 켭니다. 내 사이트는 WebForms의 맨 위에있는 사용자 지정 "MVC"이므로 POSTS에서 다른 페이지로 리디렉션되는 경우가 있는데 MAC 유효성 검사를 수행 할 수 없습니다. ViewStateMAC = false 및 ViewStateEncryption = true의 web.config 설정이 좋은 조합이 아니라고 생각합니다. – felickz

답변

2

게시 한 지 오래되었지만 PageStatePersister를 직접 구현했다고 생각하십니까? PageStatePersister는 페이지에 포함 된 ViewState 및 ControlState 데이터의 서식을 지정하는 구성 요소입니다. 보안이 가장 중요한 관심사 인 경우 데이터를 비공개로 유지하려는 암호화 알고리즘을 사용할 수 있습니다. 귀하의 구성에 따라, 당신은 꽤 유능한 환경에있는 것처럼 들리므로 분명히 먼저로드 테스트를하십시오.또한 "고전적인"ASP.NET WebForms 사이트에 통합 될 때 ViewState에서의 MVC의 계층화 된 관여에 관해서 나 경험이 없다는 것을 언급 할 가치가 있습니다.

행운을 빈다.

B

+0

제안 해 주셔서 감사합니다. 나는이 경로를 탐험 해본 적이 없으며, 자신의 PageStatePersister를 굴림에서 이탈 한 세션 i에서 viewstate를 배치함으로써 발생할 수있는 모든 문제를 조사했습니다. 만약 내가 다시 열어 본다면 분명히 세션을 스스로 암호화하는 아이디어를 탐색 할 것입니다. – felickz

0

내 생각은 그 부하 균형 웹 농장은 혼란의 근원이다. 당신은 단지 "단 하나의 서버가 현재 테스트 중입니다"라고 말했지만 증상은 웹 팜의 여러 서버가 실행 중일 때와 똑같은 소리가납니다. 그러나 web.config 만 만들었습니다 한 서버에서 machine.config가 변경됩니다. 브라우저로 웹 사이트를 방문 할 때, 때때로 한 방향으로 구성된 하나의 서버를 공격하고, 다른 방법으로 구성된 다른 서버를 공격하는 경우가 있습니다.

+0

그 생각은 내가이 노는 시간을 여러 번 내 마음을 넘었습니다. 나는 지속적으로 이것을 체크하고, 좌절했을 때로드 밸런싱되지 않은 내 dev 서버로 옮겼다. 그러나 유효한 점을 가지고 있으며 부하가 분산 된 환경의 모든 사람들이 이해하는 것이 중요합니다 – felickz