2011-05-08 5 views
1

이것이 내 테스트 구성 때문인 것으로 의심 되나, 나는 여러분에게 여러분의 생각을 물어보고 싶었습니다. 나는 빠른 테스트 프로젝트로 놀고 있었다. 간단한 양식 승인 페이지와 주문 페이지 (두 개의 필드와 "주문"을 표시하는 목록)가있었습니다. 입력 페이지가 GET 조작으로 들어오지 못하도록 매개 변수를 검색 할 때 Order.Form []을 사용하도록 주문 페이지가 설정되었습니다.ViewStateUserKey가 CSRF를 방해하지 않습니까?

ViewStateUserKey를 Page_Init에 설정하고 EnableViewStateMac을 명시 적으로 true로 설정합니다 (기본 설정 임에도 불구하고).

그런 다음 두 개의 필드 (제품 및 수량)에 대한 값을 설정하는 양식 페이지에 양식 게시를 한 .HTM을 만들었습니다. 나는 폼 제출의 일부로 viewstate를 만드는 것을 고심하지 않았다. 내 브라우저의 실제 페이지에서 소스보기를하고 양식 필드를 제외한 모든 것을 잘라내어 필드 값을 설정하는 자바 스크립트를 추가하고 form.submit()을 수행했습니다.

테스트 프로젝트에 로그인하여 열었습니다. .HTM. .HTM이 양식을 제출했는데 주문 페이지를 새로 고쳤을 때 가짜 명령을 볼 수있었습니다.

왜 ViewStateUserKey가이 문제로부터 보호하지 않았습니까? 그 종류의 공격을 막아내는 것이 아닌가? 이 예에서는 viewstate를 변경하지 않았고, 단순히 일반 양식을 게시 한 페이지를 만들었습니다. ViewStateUserKey ViewState 조작을 방지하기 위해 (이 두 가지 페이지

답변

1

테스트 페이지에 원래 viewstate 필드를 포함 했습니까? 특정 사용자에 대한 유효한 viewstate를 복사 한 다음 해당 사용자로 제출 한 경우 예, 예상 한 것입니다.

ViewStateUserKey 기능을 사용하면 자신의 사용자가 만든 ViewState를 다른 사용자가 부주의로 제출 한 내용에서 사용할 수 없습니다.

+0

내 테스트 페이지에 viewstate가 전혀 없었습니다. 폼에 두 개의 컨트롤이 있고 컨트롤 값과 폼을 전송할 호출을 설정하는 자바 스크립트가있는 페이지였습니다. – KindaConfused

+0

테스트 페이지에 viewstate가 전혀 없습니다. 폼에 두 개의 HTML 컨트롤이 있고 컨트롤 값과 폼을 전송할 호출을 설정하는 자바 스크립트가있는 페이지였습니다. 그래서 당신이 말하고있는 것은 ViewStateUserKey +의 enableViewStateMac이 * *을 viewstate가 함께 무단 사용을 방지하고이를 방지하지 것입니다 :

그래서 것을 차단하는 유일한 방법입니다 그래서 당신은 실제로 postbacks와 viewstates를 전혀 사용하지 않고 단지 평범한 오래된 HTML 폼을 처리하고 있습니까? 이 경우 자신을해야합니다. 이것을 구현하는 하나의 라이브러리는 https://www.owasp.org/index.php/.Net_CSRF_Guard를 참조하십시오. – bobince

관련 문제