需要的反仿冒表單欄位 "__RequestVerificationToken" 不存在。
這是MVC網站為了防止Cross-Site Request Forgery (CSRF)的攻擊,出線的防護措施,CSRF可以參考這裡。解決方式:
在Html.Form後面加入HTML.AntiForgeryToken()
<% using(Html.Form("UserProfile", "SubmitUpdate")) { %> <%= Html.AntiForgeryToken() %> <!-- form 開始--> <% } %>
或
@using (Html.BeginForm()) { @Html.AntiForgeryToken() <!----form 的敘述---> }
另外要注意在Loadbalance的環境也可因為Machine設成Auto導致IIS回傳以下錯誤:
System.Web.Mvc.HttpAntiForgeryException: A required anti-forgery token was not
supplied or was invalid.
---> System.Web.HttpException: Validation of viewstate MAC failed. If this
application is hosted by a Web Farm or cluster, ensure that <machineKey>
configuration specifies the same validationKey and validation algorithm.
AutoGenerate cannot be used in a cluster.
解決之道就是把Web farm裡的Web Server的Machine key都設為一樣
Generate Machine Key Elements for Web Farm
沒有留言:
張貼留言