بررسی ورودی کاربر در php و جاوا اسکریپت

saalek110

Well-Known Member
بررسی ورودی کاربر توسط php و جاوا اسکریپت


این تاپیک از تاپیک های بلا استفاده بود ادیت شد. لطفا تاپیک به تالار مربوطه منتقل شود.
 
آخرین ویرایش:

saalek110

Well-Known Member
......
:گویا بهش اعتبارسنجی فرم یا ورودی میگن
 
آخرین ویرایش:

saalek110

Well-Known Member
جایی که کاربر داده وارد می کند می تواند ارسال چیزهای مضر باشد برای مقاصد نفوذ و تخریب.

پس باید داده های ورودی فیلتر شود.
 
آخرین ویرایش:

saalek110

Well-Known Member
PHP:
function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}

PHP:
$name = test_input($_POST["name"]);
  $email = test_input($_POST["email"]);

یک تابع ساختیم تا چندین عملیات انجام دهیم. وروددی ها را به این تابع می فرستیم تا اسکن شود.


البته این نیست که بررسی حتما باید همین توابع باشه
و این طور نیست که این مقدار بررسی کافی باشد...
بعدا اگر کدهای دیگه دیدم در این تاپیک بحث می کنیم.
 
آخرین ویرایش:

saalek110

Well-Known Member
می شود با کدهای جاوا اسکریپت هم مانع وارد شدن بعضی کاراکتر ها شد.
 

saalek110

Well-Known Member
در سایت زیر با عنوان اعتبارسنجی فرم


تابع
htmlspecialchars کارش شرح داده شده.
گفته :
تابع ()htmlspecialchars

با استفاده از تابع ()htmlspecialchars، می توان کاراکترهای خاص را به HTML entity تبدیل نمود. منظور این است که کاراکترهایی مثل علامت کوچکتر(<) و بزرگتر(>) در پارامتر ورودی را به ;lt$ و ;gt$ تبدیل می کند. با این کار از حمله ی هکرهایی که می خواهند از طریق تزریق HTML یا JavaScript اخلال ایجاد کنند، جلوگیری می شود
 

saalek110

Well-Known Member

نحوه مقابله با هک از طریق"PHP_SELF"​

Wiki

با استفاده از تابع ()htmlspecialchars، می توان با هک از طریق "PHP_SELF" مقابله نمود.

کد آن شبیه زیر است:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
تابع ()htmlspecialchars، کاراکترهای خاص را به HTML entity تبدیل می کند. حالا اگر کاربر بخواهد از متغییر "PHP_SELF" سوء استفاده کند، با نتیجه زیر روبرو خواهد شد:

<form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">
و از این طریق هیچ آسیبی وارد نخواهد شد...!


از سایت بیاموز
 

saalek110

Well-Known Member
نقش تابع trim

با استفاده از تابع ()trim کاراکترهای غیرضروری (مثل: فاصله های اضافی، tab و خطوط خالی) را حذف می کنیم.

از سایت بیاموز
 

saalek110

Well-Known Member
  1. با استفاده از تابع ()stripslashes، بک اسلش ها (\) را حذف می کنیم
از سایت بیاموز
 

saalek110

Well-Known Member
بعد اینکه کاربر فرم را پر کرد و وارد متغیرها کردیم با تابع empty میشه بررسی کرد کاربر کدام فیلد را مر نکرده

PHP:
if (empty($lastname))
 

saalek110

Well-Known Member
تابع بررسی رمز عبور وارد شده تویط کاربر که پسورد امنی باشه:


PHP:
public function betalk_checkPassword($betalkpwd, &$errors) {
    $errors_init = $errors;

    if (strlen($betalkpwd) < 8) {
        $errors[] = "رمزعبور حداقل باید 8 کاراکتر باشد";
    }
    if (!preg_match("#[0-9]+#", $betalkpwd)) {
        $errors[] = "حداقل باید یک عدد داخل رمزعبور باشد";
    }
    if (!preg_match("#[a-zA-Z]+#", $betalkpwd)) {
        $errors[] = "حداقل باید یک حرف انگلیسی داخل رمزعبور باشد";
    }
    if (!preg_match("#[A-Z]+#", $betalkpwd)) {
        $errors[] = "حداقل باید یک حرف انگلیسی بزرگ داخل رمزعبور باشد";
    }
    if (!preg_match("#/[\[^\'£$%^&*()}{@:\'#~?><>,;@\|\\\-=\-_+\-¬\`\]]/+#", $betalkpwd)) {
        $errors[] = "حداقل باید یک کاراکتر خاص داخل رمزعبور باشد";
    } 

    return ($errors == $errors_init);
}


منبع:

سالک: من کد بالا را تست نکردم. فقط نقل کردم.
 

saalek110

Well-Known Member
چک پسورد با جاوا اسکریپت: تابع جاوا اسکریپت باید بالای فرم باشه..

JavaScript:
<script>
            function validatePassword(password) {
               
                // مخفی کردن پیام رمزعبور هنگامی که فیلد خالی است
                if (password.length === 0) {
                    document.getElementById("msg").innerHTML = "";
                    return;
                }
                // تعریف شرط برای کاراکترهای رمزعبور
                var matchedCase = new Array();
                matchedCase.push("[$@$!%*#?&]"); // کاراکترهای خاص
                matchedCase.push("[A-Z]");      // حروف بزرگ
                matchedCase.push("[0-9]");      // اعداد
                matchedCase.push("[a-z]");     // حروف کوچک

                // بررسی شرایط
                var ctr = 0;
                for (var i = 0; i < matchedCase.length; i++) {
                    if (new RegExp(matchedCase[i]).test(password)) {
                        ctr++;
                    }
                }
                // نمایش متن
                var color = "";
                var strength = "";
                switch (ctr) {
                    case 0:
                    case 1:
                    case 2:
                        strength = "بسیار ضعیف";
                        color = "red";
                        break;
                    case 3:
                        strength = "متوسط";
                        color = "orange";
                        break;
                    case 4:
                        strength = "قوی";
                        color = "green";
                        break;
                }
                document.getElementById("msg").innerHTML = strength;
                document.getElementById("msg").style.color = color;
            }
</script>


کد دکمه فرم را این طوری بنویسید:
HTML:
<button type="submit" onclick="validatePassword()">ثبت</button>
<span id="msg"></span>


منبع:


سالک: فکر کنم با ایجاد تغییراتی در تابع جاوا اسکریپت خیلی تست ها و کارهای دیگر هم بشه کرد.
 

saalek110

Well-Known Member
چک حین تایپ:
HTML:
<label for="pwd">رمزعبور:</label>
<input type="text" id="pwd"  onkeyup="validatePassword(this.value);"/>
<span id="msg"></span>


از همان منبع.
 

golex

Member
همیشه در کلاس ها میگفتند پی اچ پی و جاوا اسکریپت خیلی سخته برای همین نشد بریم سمتشون
 

saalek110

Well-Known Member
PHP:
<?php
if( isset($_POST['login']) ){
if( !isset( $_POST['username'] ) || !isset( $_POST['password'] )){
$error = "لطفا هر دو فیلد را کامل کنید.";
}else{
// Login Process
}
}
?>


سالک : این کد را برای این نقل کردم برای اینکه به کاربرد تابع isset آشنا بشید...
 

saalek110

Well-Known Member
معرفی تابع های اصلی در عملیات اعتبار سنجی در PHP :

در لیست زیر چهار تابع اصلی ، در عملیات اعتبار سنجی متغیر ها و کادر های ورود اطلاعات در PHP را به شما معرفی کرده ایم . این تابع ها دارای بیشترین کاربرد در عملیات اعتبار سنجی هستند . در ادامه به توضیح کامل این توابع خواهیم پرداخت :

  • تابع ( ) filter_var : این تابع یک متغیر را با یک فیلتر اعتبار سنج خاص ، اعتبار سنجی می کند .
  • تابع ( ) filter_var_array : این تابع آرایه ای از متغیرها را با یک یا چند فیلتر اعتبار سنج خاص ، اعتبار سنجی می کند .
  • تابع ( ) filter_input-Get : این تابع مقدار یک کادر دریافت داده را با یک فیلتر اعتبار سنج خاص ، اعتبار سنجی می کند .
  • تابع ( ) filter_input_array : این تابع مقدار چندین کادر دریافت داده را با یک یا چند فیلتر اعتبار سنج خاص ، اعتبار سنجی می کند .



یک مثال ساده و ابتدایی از اعتبار سنجی داده :

مثال : در مثال ساده زیر یک عملیات اعتبار سنجی ساده را انجام داده ایم . این مثال برای آشنایی کلی و ابتدایی شما با نحوه اعتبار سنجی داده در PHP است و در بخش های بعد ، مثال های کامل تری را به شما نشان خواهیم داد .
در این مثال ابتدا یک متغیر معمولی تعریف شده است . سپس توسط یک دستور با استفاده از تابع "FILTER_VALIDATE_INT" که یکی از تابع های اعتبار سنج پیش فرض در PHP است ، این مسئله بررسی شده است که آیا متغیر تعریف شده ، عدد است یا خیر . در صورت عدد بودن آن عبارت "Integer is valid" و در صورت عدد نبودن آن عبارت "Integer is not valid" در خروجی چاپ خواهد شد :

PHP:
    < ? php
  $int = 123;
    if ( filter_var ( $int , FILTER_VALIDATE_INT ) )
      {
        echo ( " Integer is not valid " ) ;
      }
    else
      {
        echo ( " Integer is valid " ) ;
      }
?>


 

saalek110

Well-Known Member

آموزش اعتبار سنجی در PHP

در این درس از مجموعه آموزش برنامه نویسی سایت سورس باران، به آموزش اعتبار سنجی در PHP خواهیم پرداخت.

قسمت مورد نیاز بررسی می کند که آیا فیلد به روش مناسب پر شده است یا خیر. در بیشتر موارد از نماد * برای قسمت مورد نیاز استفاده خواهیم کرد.

اعتبار سنجی چیست؟​

اعتبار سنجی به معنای بررسی ورودی ارسال شده توسط کاربر است. دو نوع اعتبارسنجی در PHP وجود دارد. آنها به شرح زیر هستند –

  • اعتبار سنجی سمت کاربر- اعتبار سنجی در مرورگرهای وب دستگاه مشتری انجام می شود.
  • اعتبار سنجی سمت سرور – داده ها پس از ارسال توسط داده ها ، به یک سرور ارسال شده و بررسی های اعتبارسنجی را در دستگاه سرور انجام می دهند.

برخی از قوانین اعتبار سنجی برای رشته​



فیلدقانون اعتبار سنجی
Nameحروف و فضاهای سفید لازم می باشد
Email@ و. لازم می باشد
Websiteباید یک URL معتبر داشته باشد
Radioباید حداقل یک بار قابل انتخاب باشد
Check Boxباید حداقل یک بار قابل بررسی باشد
Drop Down menuباید حداقل یک بار قابل انتخاب باشد


URL معتبر​

کد زیر اعتبار سنجی URL را نشان می دهد

PHP:
$website = input($_POST["site"]);
if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) {
   $websiteErr = "Invalid URL";
}


در بالا از نحو تأیید می شود که آیا URL مشخصی معتبر است یا خیر. این باید برخی از کلمات کلیدی به عنوان https ،ftp ،www ، a-z ،۰-۹ ، .. و غیره را مجاز کند.

ایمیل معتبر​

کد زیر اعتبار سنجی آدرس ایمیل را نشان می دهد

PHP:
$email = input($_POST["email"]);
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
   $emailErr = "Invalid format and please re-enter valid email";
}


در بالا از نحو، بررسی می شود که آیا آدرس ایمیل داده شده به خوبی شکل گرفته است یا خیر. اگر اینگونه نباشد، پیام خطایی را نشان می دهد.

مثال​

مثال زیر فرم با اعتبار صحت مورد نیاز را نشان می دهد


PHP:
<html>
  
   <head>
      <style>
         .error {color: #FF0000;}
      </style>
   </head>
  
   <body>
      <?php
         // define variables and set to empty values
         $nameErr = $emailErr = $genderErr = $websiteErr = "";
         $name = $email = $gender = $comment = $website = "";
        
         if ($_SERVER["REQUEST_METHOD"] == "POST") {
            if (empty($_POST["name"])) {
               $nameErr = "Name is required";
            }else {
               $name = test_input($_POST["name"]);
            }
            
            if (empty($_POST["email"])) {
               $emailErr = "Email is required";
            }else {
               $email = test_input($_POST["email"]);
              
               // check if e-mail address is well-formed
               if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
                  $emailErr = "Invalid email format";
               }
            }
            
            if (empty($_POST["website"])) {
               $website = "";
            }else {
               $website = test_input($_POST["website"]);
            }
            
            if (empty($_POST["comment"])) {
               $comment = "";
            }else {
               $comment = test_input($_POST["comment"]);
            }
            
            if (empty($_POST["gender"])) {
               $genderErr = "Gender is required";
            }else {
               $gender = test_input($_POST["gender"]);
            }
         }
        
         function test_input($data) {
            $data = trim($data);
            $data = stripslashes($data);
            $data = htmlspecialchars($data);
            return $data;
         }
      ?>
    
      <h2>Absolute classes registration</h2>
    
      <p><span class = "error">* required field.</span></p>
    
      <form method = "post" action = "<?php
         echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
         <table>
            <tr>
               <td>Name:</td>
               <td><input type = "text" name = "name">
                  <span class = "error">* <?php echo $nameErr;?></span>
               </td>
            </tr>
          
            <tr>
               <td>E-mail: </td>
               <td><input type = "text" name = "email">
                  <span class = "error">* <?php echo $emailErr;?></span>
               </td>
            </tr>
          
            <tr>
               <td>Time:</td>
               <td> <input type = "text" name = "website">
                  <span class = "error"><?php echo $websiteErr;?></span>
               </td>
            </tr>
            
            <tr>
               <td>Classes:</td>
               <td> <textarea name = "comment" rows = "5" cols = "40"></textarea></td>
            </tr>
            
            <tr>
               <td>Gender:</td>
               <td>
                  <input type = "radio" name = "gender" value = "female">Female
                  <input type = "radio" name = "gender" value = "male">Male
                  <span class = "error">* <?php echo $genderErr;?></span>
               </td>
            </tr>
                
            <td>
               <input type = "submit" name = "submit" value = "Submit">
            </td>
                
         </table>
            
      </form>
      
      <?php
         echo "<h2>Your given values are as:</h2>";
         echo $name;
         echo "<br>";
        
         echo $email;
         echo "<br>";
        
         echo $website;
         echo "<br>";
        
         echo $comment;
         echo "<br>";
        
         echo $gender;
      ?>
  
   </body>
</html>


Screenshot_۲۰۲۳-۰۴-۰۵_۰۳۴۶۵۲.jpg
 

جدیدترین ارسال ها

بالا