0

所以,我有一个 PHP 脚本,它接受用户的“密钥”并检查它是否有效。我不希望他们在 3 次尝试失败后能够提交表单。

我有使用 cookie 的想法,但由于它们是客户端,它们可以被刷新,所以它看起来是我脚本的第一次尝试。也使用会话,但因为它们在会话后过期。这很容易绕过。该程序不需要数据库,如果可能,我想避免它。

我还想过需要验证码才能提交表单。那是最好的选择吗?我期待听到您的建议。

4

4 回答 4

3

由于您显然已经存储了用户和密钥,因此也要跟踪失败的尝试。为每个用户而不是每个会话进行此操作,因为攻击者很容易每次都假装是一个新连接。使用此信息,您可以让登录尝试花费指数级更长的时间。

如果您还跟踪上次失败的尝试是什么时候,您可以使用它来随着时间的推移减少失败的尝试。

如果您不确定是否要使用验证码,也许在第一次尝试失败后使用它是一个好主意。

于 2011-03-19T11:30:24.060 回答
2

IP 地址REMOTE_ADDR和推荐人HTTP_REFERER检查使用$_SERVER或验证码听起来不错。所有的混合是最有效的。

于 2011-03-19T11:22:50.517 回答
0

我会建议像 recaptcha 这样的外部验证码服务:http ://www.google.com/recaptcha/learnmore

强调外在

于 2011-03-19T11:29:00.970 回答
-1

如何在 url/cookie 中添加一个字符串,包括当前时间、尝试次数和其中的一些哈希值。像这样,由于时间检查,重用以前的这样的字符串是行不通的,而且这样的字符串的生成需要通过样本对哈希函数进行逆向工程,这非常困难。

于 2011-03-19T11:35:48.130 回答