通过$ _SESSION防止大量表单提交

时间:2011-04-29 17:32:10

标签: php mysql session

如果我被C#中创建的.NET程序轰炸 - 被轰炸,因为用户正在大量提交表单上的$ _POST字段...这是我的联系表单。

我不确定.NET程序中的质量$_POST到底是多少,或者它甚至可能是一个c ++程序,我不知道。但是我有一个想法来反击这个。

我的第一个想法需要$_SESSION但是......用户创建的那些$_POST爆炸程序会处理/接受$_SESSION吗?我真的不想知道,但也许有C#中WebClient类经验的人会知道它是处理$_SESSION'S还是用户正在使用的任何东西。我正在考虑使用$_SESSION['submitted'] = $count;$count++;

的另一部分
if($_SESSION['submitted'] > 5) {
    //display captcha or block from site
} else {
    $count++;
}

如果用户的程序没有处理$ _SESSION,那么我可以将网站禁用吗?所以他们不能攻击我的联系表格?

4 个答案:

答案 0 :(得分:2)

绕过会话锁定对于恶意用户来说是微不足道的。只需在每次POST后删除会话cookie,他们就会获得一个带有限制重置的全新清洁会话。

阻止此类用户的唯一安全方法是开始限制其IP地址。将其限制为每分钟一定数量的连接尝试,并且它们无法提交每分钟多次请求。现在,如果他们可以在主机之间跳转那么你就会遇到更大的问题,并且应该考虑将你的表单移到其他地方,这样他们得到的只是404(直到他们注意到它被移动了)。

缺点是,如果他们使用的是普通代理或像AOL这样代理一切的东西,那么你也会阻止其他合法用户。

答案 1 :(得分:0)

您可以设置一些安全障碍,例如登录表单或其他形式的身份验证(如浏览器检查等)

除此之外,我能想到的唯一想法就是阻止传入的IP,这可能也不是一个好主意

答案 2 :(得分:0)

如何实施CAPTCHA?

答案 3 :(得分:0)

如果我错了,有人可以纠正我,但是SESSION会使用会话ID(一个非常长的哈希字符串)存储cookie(或其他方式),SESSION变量存储在服务器上。因此,即使他们处理了SESSION,他们也无法控制服务器存储的SESSION变量。

如果我是你,我会将CAPTCHA设置为始终开启......