0

我正在尝试使用 MVC 保护我的上传控制器方法,ValidateAntiForgeryToken但我正在努力弄清楚如何将其__RequestVerificationToken包含在帖子中。

我的动作是这样的:

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

浏览上传者的文档,我找不到任何暴露的钩子,可以让我在 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
4

2 回答 2

1

我正在使用 FineUploader 的 5.11.10 版本(重命名 Valum 的 FileUploader FineUploader 历史),它确实包含指定表单的功能,请参阅表单选项

如果您的表单不包含任何其他表单值,则使用 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>

这使您可以在 Action 上结合 [ValidateAntiForgeryToken] 上传文件。如果上传是其他表单值的一部分,您还可以通过指定该表单的 id 来指定真实表单。注意 autoUpload true,因为在设置表单元素时默认为 false。

于 2017-01-05T18:34:33.200 回答
0

如果您查看源代码,您似乎可以将防伪令牌代码添加到上传器的 _createForm: function(iframe, params){...} 部分,并且一切顺利。请参阅此处的两个答案以获得更多帮助。

于 2014-02-19T12:10:01.407 回答