防止ASP.NET MVC中的脚本化POST

时间:2018-02-26 08:43:17

标签: asp.net asp.net-mvc iis

在我的ASP.NET MVC项目中,用户可以在屏幕上保存一个表单,向服务器发出HTTP POST请求。

如何阻止客户端向服务器发送自动HTTP POST。在IIS或web.config上是否有任何内置方法来阻止异常请求率?

例如,“基于会话ID,1分钟内请求数不能超过30”的设置可能会有所帮助。

对我来说,验证码控制不是一个好选择。由于屏幕上有许多保存选项,因此为每个选项设置验证码将毫无用处。

1 个答案:

答案 0 :(得分:0)

不完全符合您的要求,但您可以使用会话变量来限制表单的发布,除非首次请求表单,并防止多次提交。

在表单页面上,生成一个随机数:

Random rnd = new Random();
int key = rnd.Next(100000, 999999);

使用此编号创建一个会话变量作为名称,如下所示:

Session["key_"+ key.ToString()] = true;

在表单中添加一个带有此编号的隐藏字段:

<input name="key" type="hidden" value="@key" />

在表单发布后获取隐藏字段值并检查会话变量是否存在。然后删除会话变量,以便无法重新提交表单:

int key = 0;
int.TryParse(Request.Form["key"] ?? string.Empty, out key);

if (Session["key_" + key.ToString()] == null)
{
    //invalid post, take some action
    //best to return the user to the form and give them another chance
    //in case it was legitimate, eg. session timed out 
}
else
{
    Session.Contents.Remove("key_" + key.ToString());
}