簡體   English   中英

手動設置表單的操作,不會自動注入防偽

[英]Setting a form's action manually, no Antiforgery is auto-injected

當我手動設置action屬性時,“Antiforgery”元素/令牌丟失(不是自動生成/注入的)

部分視圖中的代碼(部分)

<form action="?handler=edit" method='post' enctype='multipart/form-data'>

    <label asp-for="Product.Id">Art.Nr</label>
    <input asp-for="Product.Id" type="text" />

    <input type='submit' value='Save' />

</form>

渲染代碼(客戶端)

<form action="?handler=edit" method='post' enctype='multipart/form-data'>

    <label for="Product_Id">Art.Nr</label>
    <input type="text" id="Product_Id" name="Product.Id" />

    <input type='submit' value='Save' />

</form>

但是當我省略action時,它會被創建(在客戶端中呈現代碼)。

<form method='post' enctype='multipart/form-data'>

    <label for="Product_Id">Art.Nr</label>
    <input type="text" required id="Product_Id" name="Product.Id" />

    <input type='submit' value='Save' />

    <input name="__RequestVerificationToken" type="hidden" value="CfDJ8M6B..." />

</form>

這是默認行為嗎,如果想手動設置action ,還需要手動添加“防偽”元素嗎?


一張紙條

如果使用標簽助手,例如asp-page-handler ,它會起作用,並且會注入“防偽”元素,但由於我在發布時使用了不同的路徑,所以我無法使用它。

搜索了一個小時后(急於妥善解決我的問題:),我在文檔中找到了這篇文章/部分

HTML 表單元素的防偽標記的自動生成發生在<form>標記包含method="post"屬性並且以下任一情況為真時:

  • action 屬性為空 ( action="" )。
  • 未提供 action 屬性 ( <form method="post"> )。

這意味着如果手動設置action ,“防偽”元素不會自動注入。

這里有幾 (3) 種方法可以手動注入它:

  • 將標簽助手asp-antiforgery="true"添加到form元素
  • form元素中添加@Html.AntiForgeryToken()
  • 添加@inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Xsrf到視圖和
    <input id="__RequestVerificationToken" type="hidden" value="@Xsrf.GetAndStoreTokens(Context).RequestToken" />form元素中

允許自定義操作/處理程序和自動注入的“防偽”元素的另一個選項是設置submit元素的formaction屬性,在我的例子中為formaction="?handler=edit"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM