2012-11-08 1 views
4

ViewStatemac이 ASP.NET 응용 프로그램에서 활성화 된 경우 사용자가 ViewState에있는 내용을 수정하고 성공적으로 다시 서버로 전달할 수 있습니까?악의적 인 사용자가 viewstate를 수정할 수 있습니까?

ViewState의 내용을 사용하여 SQL 쿼리에 매개 변수화되지 않은 ORDER BY 절을 만드는 응용 프로그램 (다른 사람이 작성한 응용 프로그램)이 있습니다. SQL 인젝션에 대해 걱정해야합니까?

답변

2

ViewStateMAC가 활성화 된 경우 공격자는 ViewState를 변경하기 위해 "컴퓨터 키"를 해독 할 수 있어야하므로이 값이 비공개로 유지되는 경우 합리적으로 안전해야합니다.

컨트롤을 통하지 않고 코드 뒤에 값 (예 : ViewState["OrderBy"])이 설정되어 있습니까? 그렇다면 이벤트 유효성 검사의 대상이되지 않습니다.

1

예 viewstate를 수정하여 다시 게시 할 수 있습니다. 간단한 복사로 페이지를 로컬 사이트의 html로 붙여넣고 수정할 수 있습니다.

EventValidation Property을 열어 본 경우 유효성 검사가 실패하고 asp.net에서 승인하지 않습니다. 기본적으로 열립니다.

asp.net은이 속성의 페이지에있는 모든 컨트롤 및 모든 이벤트에 대한 해시 파일을 저장하고 포스트 백에서 유효성을 검사합니다. 이것이 실패하면 계속되지 않습니다. 이걸 가지고 있다면 당신이하는 말을 할 수 있습니다.

이 간단한 HTML 양식을 봐 :

<form name="input" action="someaction.asp" method="post"> 
    <select name="sel"> 
     <option value="1" >Milk</option> 
     <option value="2" >Coffee</option> 
     <option value="3" >Tea</option> 
    </select> 
<input type="submit" value="Submit"> 
</form> 

사람이 <option value="1" >Milk</option><option value="1 OR 1=1" >Milk</option>에를 변경하고 그대로 다시 게시, 그래서 당신은 전에 해시 코드를 추가하여 렌더링과 함께 다시 게시 할 수 있습니다 나머지 값을 검사하고 동일한 값 (동일한 해시 반환)을 확인합니다.

<input name="offeringID.1" value="y3A0L7tSnS%2B7LBLvI....morehere" type="checkbox" id="fbt_x_check" style="display: none;" class="check" checked="checked"> 

그리고 사용자 정의 HTML 컨트롤을 사용하는 경우 당신은 당신이 필요 :

일부 사이트 및 코더는 아마존을 참조 예를 들어 당신이, 당신과 같은 라인을 발견, 다시 포스트에있는 모든 단일 값을 암호화하는 선택 값의 개인적인 검증을 추가하여 수정되지 않도록하십시오.

asp.net 개발자는 모든 컨트롤의 총 해시 값을 만들고이를 EventValidation에 보관하기로 결정했습니다.

EventValidation을 계속 유지하면 수정이 실패합니다.

+0

'option value = "1"'보기 상태가보기 상태일까요? –

+0

@AbeMiessler asp.dropdownlist를 사용하면 자동으로 추가됩니다. html 컨트롤을 사용하는 경우 추가 해시 코드를 사용하여 수동으로 추가해야합니다. 개인적으로 asp.net 컨트롤을 사용하거나 사용자 정의 html 양식에 암호화 된 데이터를 만듭니다. 내 말은, asp.net 컨트롤을 사용하여 그물망 유효성 검사를 추가하고 아무도 viewstate를 포함하여이 값을 변경하지 않는지 확인하는 것입니다. 따라서 viewstate에 이벤트를 배치하고 EventValidation을 ON으로 유지하면 도트 네트가 보안을 유지 관리합니다. – Aristos