2011-10-18 29 views
0
@using (Html.BeginForm("Index", "Checkout", FormMethod.Post)) 
{ 
    @Html.AntiForgeryToken(App.WebUI.Helpers.SecurityHelpers.AntiforgeryTokenSalt) 
    <input type="hidden" name="amount" value="@Model.PackageCost"/> 
    <input type="hidden" name="currency" value="$"/> 
    <input type="hidden" name="itemdescription" value="@Model.PackageDescriptor"/> 
    <input type="hidden" name="type" value="digital"/> 

    <input type="submit" value="Confirmar" class="btn primary frmsubmit" /> 
} 

我张贴这种形式来结帐控制器不正确无效提交的表单在控制器中是一样的。@ Html.AntiForgeryToken当我改变值与萤火虫

public static class SecurityHelpers 
{ 
    public const string AntiforgeryTokenSalt = "tokenFooYouTolkienBladeRunner"; 
} 

我的印象是,这会阻止用户更改表单中的隐藏值使用Firebug并提交。即。购买电视2美元。

但是,我可以改变使用Firebug的值并提交它,并且它通过罚款。

我在这里错过了什么?

回答

4

您缺少anti forgery token的全部内容。它旨在阻止CSRF攻击,而不是用户更改您自己网站上的表单数据。此外,除非您打算允许客户提供,否则您不应从表单数据中检索商品的价格。

+0

看来我完全误解了这件事。感谢分享! –