在我的ASP.NET MVC项目中,用户可以在屏幕上保存一个表单,向服务器发出HTTP POST请求。
如何阻止客户端向服务器发送自动HTTP POST。在IIS或web.config上是否有任何内置方法来阻止异常请求率?
例如,“基于会话ID,1分钟内请求数不能超过30”的设置可能会有所帮助。
对我来说,验证码控制不是一个好选择。由于屏幕上有许多保存选项,因此为每个选项设置验证码将毫无用处。
答案 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());
}