获取验证码。假设人们可以轻松地从外国主机获取验证码的确切视觉效果。为此,您必须通过推荐检查(大多数浏览器(由人类导航)允许发送http_referer
)。session_id
您还必须secret
从hidden input
.
检查结果。外部主机必须将保存的变量与与您的第一个请求的会话关联的变量链接起来,这需要您实现棘手的cURL
方法。您将不得不处理多个并行请求,所有这些请求都来自您的单个 IP。
与自己生成验证码相比,在外国主机上破解验证码时,您的服务器可能会使用更多资源。
防止
- http_referer 检查
- 将单个 IP 的请求限制为例如 5 个/分钟
- 良好的会话处理和棘手的 cookie
- 对 javascript 进行逆向工程并非不可能,但是您的 javascript 越复杂,...
- 您必须找到一种能够识别外部主机上的结果的模式。最简单的签名可能是
Location
标题字段,导致/path/success.html
或/path/tryagain.php
挑战:
我花了一点时间准备一个例子:http ://woisteinebank.de/test/
在此示例中,我将密钥附加到session_id();
并将其保存在数据库中。通过session_regenerate_id();
我对每个请求都有一个新的会话。在check.php
中,我将数据库值与$_GET
值进行比较。
试着想办法得到这个验证码,我会尽力捍卫。每次您在您的网站上成功使用我的验证码时,我都会尝试为它辩护。