1

シンプルな検索ボックスと入力ボタンのあるページがあります。ユーザーが検索を行うと、次の 2 つのことが起こります。

  1. 新しいタブが開き、入力した内容を Google で検索します。

  2. 直前に表示されていたページ (検索元) が更新され、50% の確率で SQL クエリがトリガーされます。

ボッティングを防ぐために、この SQL クエリに CAPTCHA を付けたいと思います。

私が現在抱えている問題は、CAPTCHA が即座に失敗することです。最初のフォームが発砲したためだと思います。それは私がそう信じるようになった「間違った解決策」を蹴り返すことです.

これが現在の構造です。

<form id="search" method="post" action="" target="" onsubmit="refresh(this);">

<input type="text" name="q" size="31" maxlength="255" value="" /> 
<input style="color: #cc423f; font-weight:bold; padding: 7px 15px;" name="search" type="submit" value="Search" /> 
</form>
<script type="text/javascript">
function refresh(a){
// location.reload(true);
window.open("http://www.google.com/search?q="+a.q.value);
}
</script>

<?php
if(isset($_POST['q'])){
if (mt_rand(0, 1) === 0) { // 50% chance of this event happening

// BEGIN SolveMedia CAPTCHA form
echo "<form id=\"solve4points\" method=\"post\" action=\"\" target=\"\" onsubmit=\"refresh(this);\">"; ?>
<?php echo solvemedia_get_html("XI.WRU97NXJXuJWRfL0FajiudOutJyDC"); //this displays SolveMedia CAPTCHA widget
echo "<br /><input style=\"color: #cc423f; font-weight:bold; padding: 7px 15px;\" type=\"submit\" name=\"solve4points\" value=\"Get Points!\" />
</form>";

} // end SolveMedia CAPTCHA form

else { // 50% chance of this event happening
echo "<br /><p>Nope, not today!</p>";
}
}

if(isset($_POST['solve4points'])){
echo solvemedia_get_html("XI.WRU97NXJXuJWRfL0FajiudOutJyDC");
require_once("/var/www/vhosts/domain.com/httpdocs/wp-content/plugins/solvemedia/solvemedia.php");
$privkey="xxxxxxxxxxxxxxxxxxxxxx"; // API keys for CAPTCHA
$hashkey="xxxxxxxxxxxxxxxxxxxxxx";// API keys for CAPTCHA

$solvemedia_response = solvemedia_check_answer($privkey, $_SERVER["REMOTE_ADDR"], $_POST["adcopy_challenge"], $_POST["adcopy_response"], $hashkey);

if (!$solvemedia_response->is_valid) { //if user fails to complete CAPTCHA correctly, do this
print "Error: ".$solvemedia_response->error;
}

else {//if user completed CAPTCHA correctly, do this
mysql_query......

} 
}
?>

セキュリティ上の理由から、データベース接続と API キー情報を削除しましたが、内容が正しいことはわかっています。

4

1 に答える 1

1

solvemedia_get_html("XI.WRU97NXJXuJWRfL0FajiudOutJyDC"); 多分あなたは2回電話するべきではありません 。

答えを確認する直前にこのメソッドを呼び出します。私はsolvemedia captchaを知りません(私はgoogle recaptchaのものを使用しました)、それを使用したことはありませんが、おそらく2回呼び出して、同じIPアドレスから解決する新しいメディアを要求しただけなので、最後の応答を無効にしてください.

于 2013-10-02T01:07:32.347 に答える