انجمن سایت کلیدستان


رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
اشکال در اعتبار سنجی فرم با PHP و javascript

اشکال در اعتبار سنجی فرم با PHP و javascript

#1
با سلام و خسته نباشید 

من یک صفحه متشکل از یک فرم و یک کد امنیتی در انتهای اون جهت جلوگیری از پیامهای هرز ایجاد کردم و فیلدها رو با جاوااسکریپت validate کردم و کد امنیتی رو با php !!  
سوال اول اینکه: الان که مقدار action رو برابر با هر صفحه ای قرار بدم وقتی رو دکمه submit کلیک میکنم اگه مقدار فیلدها صحیح وارد شده باشه بدون اینکه صحت کد امنیتی رو بررسی کنه به اون صفحه که در action تعریف شده وارد میشه!!!! اشکال کجاست؟
سوال دوم اینکه: من یک پایگاه داده ایجاد کردم و میخوام اطلاعات کاربر به اون پایگاه فرستاده بشه تا بعد از بررسی توسط مدیر سایت در سایت منتشر بشه و یک پیغام مبنی بر موفقیت آمیز بودن ثبت اطلاعات به همراه اطلاعات وارد شده کاربر تو یک صفحه جدید به خودش نشون داده شه لطفا راهنمایی کنید که چیکار کنم  خیلی ممنون میشم

کد پی‌اچ‌پی:
<?php session_start();

if(isset(
$_POST['Submit'])){
    
// code for check server side validation
    
$correct_captcha = @$_SESSION['captcha_code'];
    unset(
$_SESSION['captcha_code']);
    if (
strcasecmp($correct_captcha$_POST['captcha_code']) != 0){
        
$msg"<span style='color:#f7601d;font-size:14pt;font-family:yekan'>کد امنیتی صحیح نیست</span>";// Captcha verification is incorrect.
    
}else{// Captcha verification is Correct. Final Code Execute here!
        
$msg="<span style='color:green'>کد امنیتی صحیح است.</span>";
    }
}

?>
<?php
$con 
mysql_connect("localhost","root","");
mysql_select_db("startup2");

// Check connection
if (!$con){
    die(
"به دلیل مشکل زیر، اتصال برقرار نشد : <br />" mysql_error());
}
mysql_close($con);
?>

<!DOCTYPE html>

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <title>Untitled Document</title>

    <script src="SpryAssets/SpryValidationTextField.js" type="text/javascript"></script>
    <script src="SpryAssets/SpryValidationTextarea.js" type="text/javascript"></script>
    <link href="SpryAssets/SpryValidationTextField.css" rel="stylesheet" type="text/css" />
    <link href="SpryAssets/SpryValidationTextarea.css" rel="stylesheet" type="text/css" />
    <link href="phpcaptcha/css/style.css" rel="stylesheet" type="text/css" />
    <script type='text/javascript'>
        function refreshCaptcha(){
            var img = document.images['captchaimg'];
            img.src = img.src.substring(0,img.src.lastIndexOf("?"))+"?rand="+Math.random()*1000;
        }


    </script>
</head>

<body>
<?php
$onvan 
$txtName2 $txtFamily2 $txtFamily3 $textfield $address $phon $mobile $textfield5 "";
if (
$_SERVER["REQUEST_METHOD"] == "POST")
{
    
$onvan test_input($_POST["onvan"]);
    
$txtName2 test_input($_POST["txtName2"]);
    
$txtFamily2 test_input($_POST["txtFamily2"]);
    
$txtFamily3 test_input($_POST["txtFamily3"]);
    
$textfield test_input($_POST["textfield"]);
    
$address test_input($_POST["address"]);
    
$phon test_input($_POST["phon"]);
    
$mobile test_input($_POST["mobile"]);
    
$textfield5 test_input($_POST["textfield5"]);

}

function 
test_input($data)
{
    
$data trim($data);
    
$data stripslashes($data);
    
$data htmlspecialchars($data);
    return 
$data;
}
?>

<form dir="rtl" id="form1" name="form1" method="post" action="content.html">

    <table width="682" height="754" cellpadding="3" cellspacing="15" dir="rtl" class="momtable">
        <tr>
            <td width="322">عنوان آگهی:</td>
            <td width="301"><span id="sprytextfield1">
        <label for="onvan"></label>
        <input type="text" name="onvan" id="onvan" maxlength="50 chars" value="<?php echo @htmlentities($_POST['onvan'])?>"/>
        <span class="textfieldRequiredMsg">لطفا عنوان آگهی را وارد کنید.</span></span></td>
        </tr>
        <tr>
            <td>متن آگهی:</td>
            <td><span id="sprytextarea1">
        <textarea name="txtName2" id="txtName2"><?php echo @htmlentities($_POST['txtName2'])?></textarea>
        <span class="textareaRequiredMsg">لطفا متن آگهی را وارد نمایید.</span><span class="textareaMaxCharsMsg">کاراکترها بیشتر از 500 حرف مجاز نیست.</span><span class="textareaMinCharsMsg">کاراکترهای کمتر از 30 حرف ،مجاز نیست.</span></span></td>
        </tr>
        <tr>
            <td>نام شرکت:</td>
            <td><input class="unrequired" type="text" name="txtFamily2" id="txtFamily2" maxlength="38 chars" value="<?php echo @htmlentities($_POST['txtFamily2'])?>"/></td>
        </tr>
        <tr>
            <td align="right">نام و نام خانوادگی:</td>
            <td><input class="unrequired" type="text" name="txtFamily3" id="txtFamily3" maxlength="25 chars" value="<?php echo @htmlentities($_POST['txtFamily3'])?>"/></td>
        </tr>
        <tr>
            <td>شهر:</td>
            <td><input type="text" name="textfield" id="textfield" maxlength="20 chars" value="<?php echo @htmlentities($_POST['textfield'])?>"/></td>
        </tr>
        <tr>
            <td>آدرس:</td>
            <td><label for="address"></label>
        <span id="sprytextarea2">
        <textarea name="address" id="address"><?php echo @htmlentities($_POST['address'])?></textarea>
      <span class="textareaMaxCharsMsg">Exceeded maximum number of characters.</span></span></td>
        </tr>
        <tr>
            <td>تلفن تماس:</td>
            <td><label for="phon"></label>
                <label for="phon"></label>
      <span id="sprytextfield5">
      <input name="phon" type="text" id="phon" value="<?php echo @htmlentities($_POST['phon'])?>" maxlength="30">
      <span class="textfieldRequiredMsg">لطفا شماره تماس خود 
      را وارد کنید.</span></span></td>
        </tr>
        <tr>
            <td>موبایل:</td>
            <td><span id="sprytextfield3">
            <label for="mobile"></label>
            <input type="text" name="mobile" id="mobile" value="<?php echo @htmlentities($_POST['mobile'])?>"/>
          <span class="textfieldRequiredMsg">لطفا شماره موبایل خود را واردکنید.</span><span class="textfieldInvalidFormatMsg">شماره موبایل صحیح نیست.</span></span></td>
        </tr>
        <tr>
            <td>ایمیل:</td>
            <td><span id="sprytextfield2">
        <input type="text" name="textfield5" id="textfield5" value="<?php echo @htmlentities($_POST['textfield5'])?>"/>
      <span class="textfieldRequiredMsg">لطفا نشانی ایمیل خود 
      را وارد کنید.</span><span class="textfieldInvalidFormatMsg">نشانی ایمیل نامعتبر است.</span></span></td>
        </tr>
        <tr>
            <td height="44" colspan="2"><input class="resetbutton" name="btnreset" type="reset" value="بازنویسی" /></td>
        </tr>
        <tr>
          <td height="204" colspan="2">
              <table width="306" border="0" align="center" cellpadding="5" cellspacing="5" class="table">
                  <?php if(isset($msg)){?>
                      <tr>
                          <td colspan="2" align="center" valign="top"><?php echo $msg;?></td>
                      </tr>
                  <?php ?>
                  <tr>

                      <td><a href='javascript: refreshCaptcha();'><img src="images/search_icon.png" width="24px" height="24px" align="left"/></a>
                          <img src="phpcaptcha/captcha.php?rand=<?php echo rand();?>" align="left" id='captchaimg'><br/><br/><br/>
                          <label for='message' dir="rtl" class="lable_1">لطفا کد امنیتی را وارد کنید:</label>
                          <br>

                          <input style="width:276px;height:25px;font-size:12pt" maxlength="10" id="captcha_code" name="captcha_code" type="text" autocomplete="off">
                          <br>
                      </td>
                  </tr>
                  <tr>
                      <td><input style="width:284px;height:40px" name="Submit" type="submit" value="ثبت" class="button1"></td>
                  </tr>
              </table>
          </td>
        </tr>
  </table>
</form>



<script type="text/javascript">
    var sprytextfield1 = new Spry.Widget.ValidationTextField("sprytextfield1");
    var sprytextfield2 = new Spry.Widget.ValidationTextField("sprytextfield2", "email");
    var sprytextfield3 = new Spry.Widget.ValidationTextField("sprytextfield3", "phone_number");
    var sprytextarea1 = new Spry.Widget.ValidationTextarea("sprytextarea1", {maxChars:500, minChars:30, useCharacterMasking:false});
    var sprytextfield5 = new Spry.Widget.ValidationTextField("sprytextfield5", "none");
    var sprytextarea2 = new Spry.Widget.ValidationTextarea("sprytextarea2", {isRequired:false, maxChars:200});
</script>


</body>
</html> 
پاسخ

اشکال در اعتبار سنجی فرم با PHP و javascript

#2
سلام.

(۱۳۹۴/۰۲/۰۵, ۱۰:۲۸ ب.ظ)'ساراعلی' نوشته: من یک صفحه متشکل از یک فرم و یک کد امنیتی در انتهای اون جهت جلوگیری از پیامهای هرز ایجاد کردم و فیلدها رو با جاوااسکریپت validate کردم و کد امنیتی رو با php !!  
سوال اول اینکه: الان که مقدار action رو برابر با هر صفحه ای قرار بدم وقتی رو دکمه submit کلیک میکنم اگه مقدار فیلدها صحیح وارد شده باشه بدون اینکه صحت کد امنیتی رو بررسی کنه به اون صفحه که در action تعریف شده وارد میشه!!!! اشکال کجاست؟
 

javascript این قابلیت را دارد که با کلیک کاربر بر روی دکمه، اطلاعات را چک کند، زیرا در سمت کاربر اجرا می شود، اما PHP در سمت سرور اجرا می شود بنابراین باید بخشی که با PHP تعیین شده، با یک بار دیگر فراخوانی صفحه ار سرور (که کد php آن صفحه هم اجرا می شود) اجرا گردد، یعنی شما نمی توانید در سمت کاربر، کد نوشته شده توسط PHP را اجرا کنید. حالا دو راه دارید. یا بخش کد امنیتی (نوشته شده توسط PHP) را هم با javascript بنویسید (که البته امن نیست و توصیه نمی شود زیرا معمولا javascript تنها برای صحت اطلاعات وارد شده در فرم به کار می رود) یا اینکه در خود صفحه دوم (صفحه دریافت اطلاعات فرم و پردازش بر روی آنها)، کد PHP مربوط به کد امنیتی را اجرا کنید.
این رو هم تذکر بدم که مجبور نیستید که حتما صفحه پردازش را متفاوت با صفحه فرم HTML انتخاب کنید. خود بنده معمولا این دو را یکی می گیرم (علامت # را برای action بگذارید) و اگر یک field از فرم به غلط وارد شده باشد، اطلاعات دریافتی را دوباره در فرم نمایش داده و تذکر می دهم که field غلط نیز تصحیح شود (کاربر هم مجبور نمی شود که دوباره اطلاعات صحیح را بنویسد).

(۱۳۹۴/۰۲/۰۵, ۱۰:۲۸ ب.ظ)'ساراعلی' نوشته: سوال دوم اینکه: من یک پایگاه داده ایجاد کردم و میخوام اطلاعات کاربر به اون پایگاه فرستاده بشه تا بعد از بررسی توسط مدیر سایت در سایت منتشر بشه و یک پیغام مبنی بر موفقیت آمیز بودن ثبت اطلاعات به همراه اطلاعات وارد شده کاربر تو یک صفحه جدید به خودش نشون داده شه لطفا راهنمایی کنید که چیکار کنم  خیلی ممنون میشم
 

پس از کد پردازشی PHP که برای ذخیره اطلاعات در پایگاه داده است، پیام موفقیت آمیز بودن ذخیره اطلاعات را بنویسید. بر اساس ساختار زیر (تشخیص صحیح اجرا شدن query ذخیره در پایگاه داده) :

کلید شماره 573

در جدول، یک ستون تعریف می کنید که مقدار پیش فرض آن برابر 0 باشد. کدهای نمایش اطلاعات از جدول را به گونه ای می نویسید (شرطی) که هر اطلاعات تنها زمانی نمایش داده می شود که این ستون برابر 1 باشد. شما اطلاعات ذخیره شده را می خوانید و اگر بدون مشکل بودند، مقدار این ستون را برابر 1 قرار می دهید (برای آن ردیف از اطلاعات).

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط ساراعلی

اشکال در اعتبار سنجی فرم با PHP و javascript

#3
(۱۳۹۴/۰۲/۰۶, ۰۲:۰۷ ب.ظ)'admin' نوشته: سلام.

(۱۳۹۴/۰۲/۰۵, ۱۰:۲۸ ب.ظ)'ساراعلی' نوشته: من یک صفحه متشکل از یک فرم و یک کد امنیتی در انتهای اون جهت جلوگیری از پیامهای هرز ایجاد کردم و فیلدها رو با جاوااسکریپت validate کردم و کد امنیتی رو با php !!  
سوال اول اینکه: الان که مقدار action رو برابر با هر صفحه ای قرار بدم وقتی رو دکمه submit کلیک میکنم اگه مقدار فیلدها صحیح وارد شده باشه بدون اینکه صحت کد امنیتی رو بررسی کنه به اون صفحه که در action تعریف شده وارد میشه!!!! اشکال کجاست؟

 

javascript این قابلیت را دارد که با کلیک کاربر بر روی دکمه، اطلاعات را چک کند، زیرا در سمت کاربر اجرا می شود، اما PHP در سمت سرور اجرا می شود بنابراین باید بخشی که با PHP تعیین شده، با یک بار دیگر فراخوانی صفحه ار سرور (که کد php آن صفحه هم اجرا می شود) اجرا گردد، یعنی شما نمی توانید در سمت کاربر، کد نوشته شده توسط PHP را اجرا کنید. حالا دو راه دارید. یا بخش کد امنیتی (نوشته شده توسط PHP) را هم با javascript بنویسید (که البته امن نیست و توصیه نمی شود زیرا معمولا javascript تنها برای صحت اطلاعات وارد شده در فرم به کار می رود) یا اینکه در خود صفحه دوم (صفحه دریافت اطلاعات فرم و پردازش بر روی آنها)، کد PHP مربوط به کد امنیتی را اجرا کنید.
این رو هم تذکر بدم که مجبور نیستید که حتما صفحه پردازش را متفاوت با صفحه فرم HTML انتخاب کنید. خود بنده معمولا این دو را یکی می گیرم (علامت # را برای action بگذارید) و اگر یک field از فرم به غلط وارد شده باشد، اطلاعات دریافتی را دوباره در فرم نمایش داده و تذکر می دهم که field غلط نیز تصحیح شود (کاربر هم مجبور نمی شود که دوباره اطلاعات صحیح را بنویسد).

(۱۳۹۴/۰۲/۰۵, ۱۰:۲۸ ب.ظ)'ساراعلی' نوشته: سوال دوم اینکه: من یک پایگاه داده ایجاد کردم و میخوام اطلاعات کاربر به اون پایگاه فرستاده بشه تا بعد از بررسی توسط مدیر سایت در سایت منتشر بشه و یک پیغام مبنی بر موفقیت آمیز بودن ثبت اطلاعات به همراه اطلاعات وارد شده کاربر تو یک صفحه جدید به خودش نشون داده شه لطفا راهنمایی کنید که چیکار کنم  خیلی ممنون میشم

 

پس از کد پردازشی PHP که برای ذخیره اطلاعات در پایگاه داده است، پیام موفقیت آمیز بودن ذخیره اطلاعات را بنویسید. بر اساس ساختار زیر (تشخیص صحیح اجرا شدن query ذخیره در پایگاه داده) :

کلید شماره 573

در جدول، یک ستون تعریف می کنید که مقدار پیش فرض آن برابر 0 باشد. کدهای نمایش اطلاعات از جدول را به گونه ای می نویسید (شرطی) که هر اطلاعات تنها زمانی نمایش داده می شود که این ستون برابر 1 باشد. شما اطلاعات ذخیره شده را می خوانید و اگر بدون مشکل بودند، مقدار این ستون را برابر 1 قرار می دهید (برای آن ردیف از اطلاعات).



 


مرسی از راهنمایتتون به نظر شما اگه من اعتبار سنجی فرمم رو کلا سمت سرور کنم این مشکلاتم حل میشه؟؟یعنی دیگه کد امنیتی و فرم برای validate یکی میشه ؟؟
 
پاسخ

اشکال در اعتبار سنجی فرم با PHP و javascript

#4
نه نیازی نیست که اعتبارسنجی های مرتبط با javascript برای فرم را تغییر بدهید. شما مشکلتون این بوده که کد PHP مربوط به captcha در صفحه فرم بوده و چون صفحه پردازش فرق داشته (در واقع این بخش پردازشی در آن نبوده)، عملا این بخش اجرا نمیشده. حالا یا آن بخش از کد PHP را در صفحه پردازش قرار بدهید یا اینکه صفحه پردازش را برابر همین صفحه فرم قرار داده و با تابع isset  چک می کنید که هرگاه مقادیر فرم به صفحه ارسال شد، کدهای پردازشی که شامل آن بخش captcha هم می باشد، اجرا شوند.

bookbook 
لطفا برای درج کد، از دکمه مخصوص درج کد در ادیتور انجمن استفاده کنید.
در مورد برنامه نویسی، مدیران تنها راهنمایی می کنند و نوشتن برنامه نهایی، به عهده کاربران می باشد (اینجا محلی برای یادگیری است، نه سفارش کدنویسی).
کاربران باید ابتدا خود به خطایابی برنامه بپردازند، نه اینکه به محض دیدن خطا، کدها را در انجمن، copy و paste کرده و از مدیران انتظار بررسی داشته باشند.
پاسخ
 سپاس شده توسط شماره مجازی امارات ، تلگرام ضد فیلتر 2023


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان