2014-02-19 2 views
0

MVC ValidateAntiForgeryToken을 사용하여 업로드 컨트롤러 메소드를 보호하려고하지만 게시물에 __RequestVerificationToken을 얻는 방법을 고민 중입니다. 나는 그게 생성하는 양식을 조작하는 나에게 전분기 코드 외부 액세스를 허용 할 찾을 수있는 노출 후크가없는Valums 파일 업 로더 - ValidateAntiForgeryToken 포함

[HttpPost, ValidateAntiForgeryToken] 
public ActionResult FileUpload(HttpPostedFileBase qqfile) 

업 로더에 대한 documentation을 통해 상대 :

내 행동이 같다 .

다른 사람이이 기능을 사용할 수 있습니까?

내 요청은 여전히 ​​유효성 검사를 통과하지 않은 양식 작성에 대한 소스 파일을 편집 한 후 :

요청을

http://localhost:54275/UserProfile/FileUpload?qqfile=266758_10150696082935268_8163320_o.jpg 

Host: localhost:54275 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:27.0) Gecko/20100101 Firefox/27.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-gb,en;q=0.5 
Accept-Encoding: gzip, deflate 
DNT: 1 
X-Requested-With: XMLHttpRequest 
X-File-Name: 266758_10150696082935268_8163320_o.jpg 
Content-Type: application/octet-stream 
X-Mime-Type: image/jpeg 
Referer: http://localhost:54275/UserProfile/Edit 
Content-Length: 625352 
Cookie: __test=1; RememberMe=-1167340540^1#-5833880764017141030; __RequestVerificationToken=BEIHblTcEaCio_1_i6bJnSYmituqQfq9y2ge63T85w15pAhbPldPZqY8DhLTubmtmd9OLtAuJcHdmfaFHSbn1L7oAYAtxDJWdMOOzNrddhU1; DotNetOpenAuth.WebServerClient.XSRF-Session=O-l5-Hv0flYqKL27j0TGhA; .ASPXAUTH=52C5EDFB92A09FA0395676E23BE1EBBBF03D3E88EF7C81761B76C1C8EF67936C0D9FBFD730ED77B0246C49757828A7C17D0DD7644A1C50988ECFF4C3DEDF15783E5FD7C4BA97E484F9FD6460EB6A5310E27453B461E320D10E74A5F8AEE1C0A5B1367D0DB4060958B48DACB12E80AA23; TCSESSIONID=D9016B850A1BCFD6921E274467F52CEE 
Connection: keep-alive 
Pragma: no-cache 
Cache-Control: no-cache 
Fiddler-Encoding: base64 

답변

0

당신이를 추가 할 수 있습니다처럼 보이는 소스 코드를 보면 antiforgery 토큰 코드를 업 로더의 _createForm : function (iframe, params) {...} 부분에 추가하면됩니다. 자세한 내용은 두 답변 here을 참조하십시오.

+0

그래, 내가 탐색했을 때 그 코드를 보았지만 그와 같은 해킹 소스는 나중에 업그레이드 될 때 거의 놓치게 될 것입니다. 솔직히 말하면 내가 피하려고 한 것. 감사. – Jammer

+0

이미 Ajax에 대한 비슷한 코드를 사용하고 있으므로 모든 것을 이미 갖추고 있으므로 소스 파일을 해킹하고 싶지 않습니다. – Jammer

+0

내가 테스트하지 않은 다른 옵션은 업 로더를 호출 할 때 'params'변수에 위조 방지를 추가하는 것일 수 있습니다. – PlTaylor

1

내가 FineUploader의 버전 5.11.10을 사용하고 (Valum의 FileUploader FineUploader history mentioned의 이름을 변경)과는 형태를 지정하는 기능을 포함하지, Form Options

AntiForgeryToken 검증와 FineUpload의 예를 참조 양식 아무튼 경우 다른 양식 값이 포함되어 있지 않은 경우 AntiForgeryToken에 일부 ID가있는 양식 (아래 예에서는 testForm)을 포함해야합니다. 이 액션에 [ValidateAntiForgeryToken]와 함께 파일을 업로드 할 수 있습니다

<div id="fileUploadContainer"></div> 
<script> 
    var uploader = new qq.FineUploader({ 
     element: document.getElementById("fileUploadContainer"), 
     ... 
     form: { 
      element: "testForm", 
      autoUpload: true 
     } 
    }); 
</script> 

:

@using (Html.BeginForm(MVCHelpers.Bank.Transactions.UploadFile(), FormMethod.Post, new { id = "testForm" })) 
{ 
    @Html.AntiForgeryToken() 
} 

그리고 FineUploader로도 보낼 수는이 양식을 지정

. 업로드가 다른 양식 값의 일부인 경우 해당 양식의 ID를 지정하여 실제 양식을 지정할 수도 있습니다. 양식 요소를 설정할 때 기본적으로 false이므로 autoUpload true를주의하십시오.