【发布时间】:2012-09-25 09:52:13
【问题描述】:
我正在维护一些由其他人开发的页面。我注意到,表单由某种图像验证码保护,每次用户进入页面时都会生成该验证码。 CAPTCHA 存储在名为check 的隐藏输入中,用户输入的值在提交表单后与隐藏输入的值进行比较。
我尝试使用 cURL 从隐藏的输入中读取页面和 parse CAPTHA。
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://example.com/form/");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($curl);
$html = str_get_html($result);
$captcha = $html->find('input[name=check]');
var_dump($captcha[0]->value);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, array(
"name" => "Joe",
"telephone" => "1423456789",
"message" => "Lorem ipsum",
"auth" => $captcha[0]->value,
"check" => $captcha[0]->value,
"submit_f1" => "Send"
));
$result = curl_exec($curl);
curl_close ($curl);
运行上述脚本会导致正确的表单提交。更重要的是,我注意到,我可以简单地覆盖后数组中的 auth 和 check 值:
"auth" => 123,
"check" => 123,
并且表单也被正确提交。
我意识到没有 100% 安全的方法来保护表单,但是我怎样才能更多地保护我的表单并让自动提交变得更难一些。
【问题讨论】:
-
如果您可以编辑代码,我建议您使用
google recaptcha