PDA

View Full Version : سوال: مشکل در ساخت سوال امنیتی با Array (حل شد)



Gapgoo
یک شنبه 15 تیر 1393, 17:39 عصر
سلام
دوستان من یک سوال امنیتی با Array ها درست کردم ولی در آخر اررور کد امنیتی اشتباه است می گیرم در صورتی که همی چیز به نظر من درست هست .
ممنون میشم کد رو بررسی کننید .




$question = Array('2 x 2' => '4','5 x 2' => '10','20 x 2' => '40','7 x 8' => '56','5 x 5' => '25','6 x 5' => '30','9 x 9' => '81');
$randomResultKey = array_rand($question,1);
$questionAnswer = $question[$randomResultKey];

elseif($questionAnswer != $_POST['question']) {

$errors['question'] = 'سوال امنیتی اشتباه است';
}

vahidqara
یک شنبه 15 تیر 1393, 18:42 عصر
سلام و درود .. میشه کدهارو کامل بزارید آیا؟ :لبخندساده:

H:Shojaei
یک شنبه 15 تیر 1393, 19:01 عصر
سلام
کد که کامل نیست ولی من اینطوری تست کردم درست بود فک کنم مشکل از اینجا نباشه...

$question = Array('2 x 2' => '4','5 x 2' => '10','20 x 2' => '40','7 x 8' => '56','5 x 5' => '25','6 x 5' => '30','9 x 9' => '81');$randomResultKey = array_rand($question,1);$questionAnswer = $question[$randomResultKey]; if($questionAnswer != 10) { echo 'no'; } else { echo 'yes'; }

Gapgoo
یک شنبه 15 تیر 1393, 23:14 عصر
کد کامل

<?php/** * Created by PhpStorm. * User: Pedram Marandi * Date: 3/24/14 * Time: 9:35 AM */$errors = array();$errmsg = '';$question = Array('2 x 2' => '4','5 x 2' => '10','20 x 2' => '40','7 x 8' => '56','5 x 5' => '25','6 x 5' => '30','9 x 9' => '81');$randomResultKey = array_rand($question,1);$questionAnswer = $question[$randomResultKey];if(isset($_POST['title']) && isset($_POST['adress']) && isset($_POST['question'])) {

$errors = Array(); $title = addslashes($_POST['title']);
$adress =addslashes($_POST['adress']); if(strtolower(substr($adress,0,7))=="http://"){ $adress = substr($adress,7); } if(strtolower(substr($adress,0,4))=="www."){ $adress = substr($adress,4); } if(strtolower(substr($adress,-1,1))=="/"){ $adress = substr($adress,0,-1); }
$admin = $_SESSION['username']; $website_check = $mysqli->query("SELECT * FROM website WHERE adress='$adress'"); $row_cnt = $website_check->num_rows;




if($row_cnt > 0) { $errors['exist']= 'این آدرس قبلا در سیستم ثبت شده است';
}elseif($title =='' || $adress == '') { $errors['empty'] = 'لطفا تمامی فیلد هارا پر کنید';
}elseif($questionAnswer != $_POST['question']) { $errors['question'] = 'سوال امنیتی اشتباه است';
}


elseif(sizeof($errors) == 0){ $query = "INSERT INTO website (admin, title, adress) VALUES ('$admin','$title','$adress')"; $mysqli->query($query); header('Location: ?page=manage'); exit(); }

}?><?PHP if (sizeof($errors) == 0) { // you can process your for here and redirect or show a success message $values = array(); // empty values array} else {// one or more errors foreach($errors as $error) { $errmsg .= $error . '<br />';
}}
?>
<?PHP echo $errmsg;

?><div class="well"> <form class="bs-example form-horizontal" method="post"> <fieldset> <legend>افزودن سایت جدید</legend> <div class="form-group"> <label for="inputPassword" class="col-lg-4 control-label"> آدرس وبسایت </label> <div class="col-lg-8"> <input type="text" name="adress" class="form-control" id="inputEmail" placeholder=" آدرس وبسایت"> </div> </div> <div class="form-group"> <label for="inputPassword" class="col-lg-4 control-label">عنوان وبسایت </label> <div class="col-lg-8"> <input type="text" name="title" class="form-control" id="inputPassword" placeholder=" عنوان سایت">
</div> </div>


<div class="form-group"> <label for="inputPassword" class="col-lg-4 control-label"> سوال امنیتی </label> <div class="col-lg-4"> <strong style="font-size: 21px;"> <?PHP echo $randomResultKey; ?> </strong> </div>
<div class="col-lg-4"> <input style="font-family: tahoma" type="text" name="question" class="form-control" style="font-family: tahoma;" value="<?PHP echo $questionAnswer; ?>">
</div>







<div class="form-group"> <div class="col-lg-10 col-lg-offset-2"> <button class="btn btn-default" type="reset">حذف فرم</button> <button type="submit" class="btn btn-primary">ارسال</button> </div> </div> </fieldset></form></div>

Gapgoo
دوشنبه 16 تیر 1393, 22:29 عصر
دوستان منتظر کمکمتون هستم .... خیلی مشکل خوردم

MMSHFE
سه شنبه 17 تیر 1393, 09:47 صبح
بنظرتون بهتر نیست بجای اینکه ضربها و جوابها رو توی آرایه بگذارین، دو عدد تصادفی تولید کنید و توی سشن بگذارین و به کاربر نشون بدین و بعد که حاصلضرب رو وارد کرد و فرم سابمیت شد، با حاصلضرب مقادیر توی سشن مقایسه کنید؟ اینطوری اعداد بیشتری هم میشه درنظر گرفت. محدوده اعداد تصادفی رو هم میتونید انتخاب کنید. کدتون خیلی نامرتب کپی شده ولی تا جایی که فهمیدم مشکل اینه که هربار صفحه نمایش داده میشه، دوباره یک جواب تصادفی دیگه انتخاب میشه و طبیعیه که جواب کاربر با جوابی که جدیداً انتخاب شده، فرق کنه. شما باید قبل از پردازش فرم، جواب صحیح رو توی سشن ذخیره کنید و دفعه بعد با مقدار سشن مقایسه کنید نه اینکه دوباره یک جواب تصادفی انتخاب بشه و انتظار داشته باشین جواب کاربر که حتی با جواب قبلی یکسان هست، با جواب جدید هم یکی باشه.

Gapgoo
سه شنبه 17 تیر 1393, 10:32 صبح
ممنون
با کمکتون مشکل حل شد
مرسی از راهنمایی