2014-02-19 44 views
0

我試圖保護我的上傳控制器方法使用MVC ValidateAntiForgeryToken,但我正在努力解決如何獲得__RequestVerificationToken包括在帖子中。Valums文件上傳器 - 包括ValidateAntiForgeryToken

我的動作是這樣的:

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

通過documentation爲上傳尋找沒有任何暴露的掛鉤,我可以找到,讓我的QQ代碼外部訪問操縱它生成表單。

有沒有其他人設法讓這個工作?

編輯源文件爲創建的表單我的請求還是沒有通過驗證後:

請求

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

如果您在源代碼中,它看起來像您可以添加看防僞令牌代碼添加到上傳器的_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)。

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

而在FineUploader指定它的形式也派:

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

這使您可以在您的行動與[ValidateAntiForgeryToken]組合上傳文件。如果上傳是其他表單值的一部分,您也可以指定一個真實表單。請注意autoUpload爲true,因爲在設置表單元素時它默認爲false。

相關問題