URL 有效负载如 Start {{sum=(2*2.0)}} End 在 razor 验证消息中执行 helper

URL with payload like Start {{sum=(2*2.0)}} End executes in razor validation message for helper

最近有人向我展示了他们如何通过将网站未预期的值放入 URL 和 运行 它的 MVC 默认验证消息来在 MVC 站点上执行某些操作。

他们做了类似的事情:

?page=Start%20%7B%7Bsum%3d(2*2.0)%7D%7D%20End

网站将验证消息作为 "The value 'Start 4 END' is not valid for page." 所以它做了总和。

在同一个站点上,尽管尝试将 javascript 放入并执行它没有用。

所以我有点困惑,我找不到任何关于将这种代码注入网站的信息。那么,这是一个大问题吗?使用此语法,您还可以 运行 编写哪些其他类型的代码?你会如何修复它以使其不能?

更新 - 附加信息:

MVC 版本为 4

页面属性定义为:

public class SearchContext
{
    public int Page { get; set; }
}

这将传递给控制器​​,以便在用户返回时记住该页面:

[HttpGet]
public ActionResult Create( SearchContext searchOptions )
{
    var viewModel = new MyViewModel( ){
        SearchOptions = searchOptions
    };
    // .....
    return View( viewModel );
}

razor 文件有:

@using ( Html.BeginForm( ) )
{
    @Html.AntiForgeryToken()
    @Html.HiddenFor( m => m.SearchOptions.Page )

    // ValidationSummary calculating 'Start 4 End'??
    @Html.ValidationSummary( false )

    // ... form fields .... 

    <span class="right">
        <input type="submit" value="Save" class="button saveOrSubmit" />
    </span>
    @Html.ActionLink( "Cancel", "Index", Model.SearchOptions )
}

样本:

使用 /Create?page=Hello

使用/Create?Page=Start%20%7B%7Bsum%3d(2*2.0)%7D%7D%20End

好的,刚发现它是一个 Angular 页面,摘要位于 Angular...

评估的范围内