2016-10-13 3 views
1

보안 전문가가 아니기 때문에 나는 윤리적 인 또는 검은 모자 해커가 아니거나 보안 분야와 관련하여 내가 알고있는 사실을 분명히하고 싶습니다. 웹 페이지를 만들 때 양식은 교차 사이트 요청 위조 "CSRF"로부터 양식을 보호하기 위해 취해 지지만 일부 시나리오에서는 입력 요소와 버튼 또는 클릭 가능한 div가 포함 된 div 요소를 사용하여 정확한 작업을 수행 할 수 있습니다.CSRF에 대한 입력으로 div를 보안해야합니까?

보통 면도기 페이지에서 양식 선언 내부

@Html.Antiforgerytoken() 

를 사용하여이 ASP.NET에서 CSRF 보호됩니다 형태

문제는 코딩 때 유용하다거나가 작동을 입력 및 AJAX 호출을 수행 할 것입니다 단추가 들어있는 주어진 div 함께 동일한 프로 시저를 수행 할?

답변

0

예, 클라이언트 측 솔루션은 전혀 중요하지 않습니다. CSRF는 서버 측 취약점이며, 서버 상태 (데이터, 기본적으로 로그인, 권한 수준 변경 등)를 변경하는 서버에 대한 모든 호출은 보호되지 않으면 CSRF에 취약합니다.

AJAX 요청에서 직접 토큰을 보내야합니다. jQuery를 사용하면 $.ajaxSetup()beforeSend 후크를 사용하여 상태 변경 요청을 캡처하고 토큰을 자동으로 추가 할 수 있습니다 (일반적으로 POST에 적용되지만 애플리케이션이 GET을 사용하여 물건을 변경하는 경우 PUT, DELETE, GET 일 수도 있음) . beforeSend을 사용하면 한 번만 수행하면되므로 기억할 필요가 없습니다. 이 경우 토큰은 일반적으로 @Html.AntiforgeryToken() 페이지로 생성 할 수 있습니다. 자바 스크립트는 여기에서 가져올 수 있습니다.

json 데이터를 보낼 때 약간 특별한 경우가 있습니다 (요청의 콘텐츠 유형이 application/json이고 www-url로 인코딩되지 않았습니다). 표준 속성 [ValidateAntiForgeryToken]은 json에서 토큰을 가져올 수 없으며 전달할 수있는 최선의 방법은 요청 헤더에서 가져올 수 없습니다. 이 경우 사용자 정의 유효성 검사 특성을 구현할 수 있지만 토큰을 가져올 위치 만 구현하면됩니다. 실제 유효성 검사를 위해서는 여전히 표준 AntiForgery.Validate() 메서드를 사용할 수 있습니다.

+0

대단히 감사합니다. 이해가됩니다 (y) – maces