1

PHP にある登録フォームと Captcha の両方を統合するのに問題があります。非常に限られたコーディング知識でそれらを統合しようとしましたが、間違った検証コードを入力すると、「間違ったCAPTCHA」と表示されますが、残念ながら、最初にキャプチャを検証せずにMysql Dbにユーザーを入力します.

関連するすべてのコードは次のとおりです。よろしくお願いします。ありがとうございます。

1.Registration.php



    <div class="form-title">Sign Up</div>
    <div class="form-sub-title">It's free and anyone can join</div>

        <form method="post" action="check.php" enctype="multipart/form-data">

        <table width="864" align="center" cellpadding = "15">



            <tr>
                <td>FirstName:</td>
                <td><input type="text" name="FirstName" maxlength="10" required="" ></td>
              .....................................................................................................................................................................................................

         <td>&nbsp;</td>

</td>
  </tr> </td>
  <td>
 <?php
session_start();
echo '<form action="check.php" method="post">';
$rand_int1 = substr(mt_rand(),0,2);
$rand_int2 = substr(mt_rand(),0,1);
$rand_int3 = substr(mt_rand(),0,1);
$captcha_answer = $rand_int1 + $rand_int2 - $rand_int3;
$_SESSION['captcha_answer'] = $captcha_answer;
echo 'What is '.$rand_int1.' + '.$rand_int2.' - '.$rand_int3.'?<br>
<input type="text" name="captcha">
<td><input type="submit" value="Submit" name="registration" class="greenButton"/><img id="loading" src="img/ajax-loader.gif" alt="working.." /></td>
</form>';
?>
</td>
</tr>



 2. Check.php


   <?php
session_start();
$captcha = $_POST['captcha'];
$captcha_answer = $_SESSION['captcha_answer'];

if($captcha != $captcha_answer) {
    echo 'Captcha is incorrect!';
}
else {
    echo 'Captcha is correct, congratulations! :)';
}
?>




<?php



if(isset($_POST['registration']))
{
    require "connection.php";
    $FirstName = strip_tags($_POST['FirstName']);
    $LastName = strip_tags($_POST['LastName']);
    $Msisdn = $_POST['Msisdn'];

    $month = $_POST['month'];
    $day = $_POST['day'];
    $year = $_POST['year'];

    $date = $year . "-" . $month . "-" . $day;
    $dob = date('y-m-d', strtotime($date));




$Gender = $_POST['Gender'];
$Faith = $_POST['Faith'];
$City = $_POST['City'];
$MarritalStatus = $_POST['MarritalStatus'];
$Profession =$_POST['Profession'];
$Country = $_POST['Country'];








$query="insert into users set FirstName='".$FirstName."',LastName='".$LastName
        ."',Msisdn='".$Msisdn."',dob='".$dob."',Gender='".$Gender."',Faith='".$Faith."',City='".$City."',MarritalStatus='".$MarritalStatus."',Profession='".$Profession."',Country='".$Country."'";


mysql_query($query)or  die("".mysql_error());   



    echo "Successful Registration!";



        }
?>     
4

2 に答える 2

0

ここのコードは、capcha が成功したかどうかをチェックしません。その変化をするために

if(isset($_POST['registration']))

if(isset($_POST['registration']) && $captcha == $captcha_answer)

于 2013-09-10T13:34:51.247 に答える
0

キャプチャは、ボットがフォームを正常に送信するのを妨げているはずです。x1 + x2 - x3自動化されたフォーム送信には簡単すぎます。

タスクを解決するには、if 句if(isset($_POST['registration']))でキャプチャの成功も確認する必要があります。次のように変更します。

if (isset($_POST['registration']) && $captcha === $captcha_answer)

mysql_関数は、新しい PHP バージョンでは間もなく無効になるため、使用しないでください。

あなたのコードは、ハッカー (SQL インジェクション) にとって格好の標的でもあるようです。$_POST変数を単純なクエリに入れるだけでなく、変数を検証する必要があります。

';DROP TABLE users;--ファーストネームを入力するように。

于 2013-09-10T13:33:12.177 に答える