내 앱에서 CSRF 공격에 대한 완화를 구현했습니다.인터넷에서 블로그 게시물에서 읽은 정보에 따라 . 특히이 게시물은 내 구현의 동인이었습니다.
- ASP.NET MVC에 대한 모범 사례ASP.NET 및 웹 도구 개발자 콘텐츠 팀의
- 사이트 간 요청 위조 공격 분석Phil Haack 블로그
- ASP.NET MVC 프레임 워크의 AntiForgeryToken- David Hayden 블로그의 Html.AntiForgeryToken 및 ValidateAntiForgeryToken 특성
기본적으로 이러한 기사와 권장 사항에 따르면 CSRF 공격을 방지하려면 다음 코드를 구현해야합니다.
1) [ValidateAntiForgeryToken]
POST Http 동사를 허용하는 모든 작업을 추가하십시오 .
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult SomeAction( SomeModel model ) {
}
2) <%= Html.AntiForgeryToken() %>
서버에 데이터를 제출하는 양식 안에 도우미를 추가하십시오.
<div style="text-align:right; padding: 8px;">
<%= Html.AntiForgeryToken() %>
<input type="submit" id="btnSave" value="Save" />
</div>
어쨌든 내 응용 프로그램의 일부 부분에서는 jQuery와 함께 Ajax POST를 서버에 전혀 양식을 작성하지 않고 서버에 수행하고 있습니다. 예를 들어 사용자가 이미지를 클릭하여 특정 작업을 수행 할 수있게합니다.
활동 목록이있는 테이블이 있다고 가정하십시오. 표의 열에 "활동 완료로 표시"라는 이미지가 있으며 사용자가 해당 활동을 클릭하면 다음 샘플과 같이 Ajax POST를 수행합니다.
$("a.markAsDone").click(function (event) {
event.preventDefault();
$.ajax({
type: "post",
dataType: "html",
url: $(this).attr("rel"),
data: {},
success: function (response) {
// ....
}
});
});
<%= Html.AntiForgeryToken() %>
이 경우 어떻게 사용할 수 있습니까? Ajax 호출의 data 매개 변수 안에 도우미 호출을 포함시켜야합니까?
긴 게시물에 대해 죄송합니다. 도와 주셔서 대단히 감사합니다.
편집 :
당으로 jayrdub 대답 나는 다음과 같은 방법으로 사용했다
$("a.markAsDone").click(function (event) {
event.preventDefault();
$.ajax({
type: "post",
dataType: "html",
url: $(this).attr("rel"),
data: {
AddAntiForgeryToken({}),
id: parseInt($(this).attr("title"))
},
success: function (response) {
// ....
}
});
});