2012-12-27 1 views
4

현재 ASP.net 웹 사이트 응용 프로그램의 보안 문제를 해결하고 있습니다.EnableViewStateMAC = true이면 ASP.Net 웹 사이트의 ViewStateEncryption에 필수입니까?

문제점 중 하나는 ViewState이 암호화되지 않았기 때문입니다.

그래서 StackOverFlow 및 다른 위치에서 viewState를 암호화하는 방법을 확인했으며 <pages viewStateEncryptionMode="Always" />을 사용하고 Web.config에 <machineKey validation="3DES" />과 같은 3DES machinekey를 추가했습니다.

"EnableViewStateMAC=true"도 꼭 필요한지 알고 싶습니다. 이것은 내가 온라인에서 찾은 제안 된 해결책 중 일부에서 언급 되었기 때문에. 하지만 내 수표에서 나는 암호화가 작동하지 않고 있다는 것을 알았습니다.

[참고 :.이 응용 프로그램이 아닌 실제적인 솔루션입니다 I 개별 페이지를 변경하기 때문에 응용 프로그램 수준 (의 Web.config)에서 이러한 변경을해야했다] 때 당신

+0

ViewState를 암호화 할 것이므로 데이터를 변조하는 침입자를 탐지하기 위해 MAC을 사용하는 것이 좋습니다. 암호화만으로는 메시지 무결성을 제공하지 않습니다. – mfanto

답변

0

그것은 문제가 될거야 호스트 다중 서버. 기계 키가 다르기 때문입니다.

프로젝트가 단일 컴퓨터에서 실행되는 경우. EnableViewStateMAC = true는 안전합니다.

enableViewStateMac을 사용하려면 연속 요청을 동일한 서버 (예 : 서버 선호도)로 전달해야합니다. 이 기능은 페이지의 뷰 상태가 변경되는 것을 방지하는 데 사용됩니다. 그러나 현재 서버의 자동 생성 유효성 검사 키를 기반으로합니다. 이 키에서 메시지 인증 코드 (MAC)가 생성되어 ViewState에서 다시 브라우저로 전송됩니다. 문제는 POST 백이 수행되어 다른 서버로 이동하는 경우 "손상된 뷰 상태"라는 작은 오류 메시지가 표시된다는 것입니다.

이 문제를 해결하려면 enableViewStateMac을 요소에서 false로 설정하거나 팜의 모든 서버에서 요소의 validationKey 특성에 공통 값을 지정하십시오.

그런데 설명서에는 이것이 기본적으로 꺼져 있다고 나와 있습니다. 그건 틀렸다! Machine.config를 확인하십시오!

+0

안녕하세요, 답변 해 주셔서 감사합니다. 내가 알고 싶은 것은 EnableViewStateMAC = true를 사용하는 것이 절대적으로 필요한지 여부입니다. ??? 아니면 내 viewState를 암호화하기에 충분했던 위의 변경 사항이 아닙니까 ?? 필요없는 경우 EnableViewStateMAC을 사용하고 싶지 않습니다. – Tx36

+0

당신은 결정할 것입니다. 활성화하지 않은 경우. ThirdParty 도구는 디코딩 할 수 있습니다. 귀하의 viewSate. http://ignatu.co.uk/ViewStateDecoder.aspx – halit

+0

Ex. 당신은 viewstate에 암호를 포함하는 사용자 목록을 저장하는 경우. 암호를 해독하고 볼 수 있습니다. – halit

17

암호화가 활성화되어 있어도 EnableViewStateMac을 false로 설정하지 마십시오. MAC은 클라이언트가 ViewState의 내용을 악의적으로 조작 할 수 없음을 보증합니다. (암호화만으로는이를 보장하기에 충분하지 않으며 MAC이 필요합니다.)

EnableViewStateMac 속성은 'false'로 설정할 올바른 이유가 없으므로 이후 버전의 제품에서 제거됩니다.

+0

ViewState를 데이터베이스에 유지하여 ID 만 클라이언트에 전달되고 ViewState를 볼 수있는 방법이 없다면 어떻게 될까요? – Lloyd

+4

상관 없어요. EnableViewStateMac은 ViewState 이상을 보호하므로 false로 설정해서는 안됩니다. 이 규칙에 대한 예외는 없습니다. – Levi

+2

그리고 ... 10 개월 후 @Levi가 방금 트위터에 발표했는데 false로 설정하더라도 무시됩니다. Levi가 말했듯이 예외는없고 이제 코드가이 코드에 의존하면 깨질 것입니다. :) –

1

당신이 할 수 있습니다 :

는 ASP.NET 4.5.2 시작은 런타임 여기의 enableViewStateMac = 사실

자세한 내용은 시행 2014 년 9 월 기준

모든 ASP.NET 버전 실행 시간 1.1 - 4.5.2 지금

<%의 @ 페이지의 enableViewStateMac = "false"를 %>

< 페이지의 enableViewStateMac = "거짓"/>

http://blogs.msdn.com/b/webdev/archive/2014/09/09/farewell-enableviewstatemac.aspx 설정 금지

+0

EnableViewStateMac = "true"이면 아무 것도 수정해야합니까? – Sid