私は他の誰かによって開発されたいくつかのページを維持することに取り組んでいます。フォームは、ユーザーがページに入るたびに生成されるある種の画像CAPTCHAによって保護されていることに気づきました。CAPTCHAは、という名前の非表示の入力に保存されcheck
、ユーザーが入力した値は、フォームの送信後に非表示の入力からの値と比較されます。
私はcURLを使用してページを読み取り、その非表示の入力から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
さらに、post配列のcheck
値を単純に上書きできることに気づきました。
"auth" => 123,
"check" => 123,
フォームも正しく送信されています。
フォームを保護するための100%安全な方法はないことを認識していますが、フォームをもう少し保護し、自動送信を少し難しくするにはどうすればよいですか。