امتیاز موضوع:
  • 1 رأی - میانگین امتیازات: 5
  • 1
  • 2
  • 3
  • 4
  • 5
اعتبار سنجی فرم ها با عبارات منظم در PHP
نویسنده پیام
Ghoghnus آفلاین
مدیر بخش
*****

ارسال‌ها: 1,462
موضوع‌ها: 253
تاریخ عضویت: آذر ۱۳۸۸

تشکرها : 1631
( 3884 تشکر در 1422 ارسال )
ارسال: #1
اعتبار سنجی فرم ها با عبارات منظم در PHP
یکی از مهمترین قسمتهای برنامه نویسی وب با PHP، اعتبار سنجی و کنترل داده های ورودی توسط کاربر است؛ فرم ها، اصلی ترین ابزار برقراری ارتباط با کاربران سایت میباشند و اطمینان از اینکه کاربر فرم را در قالب صحیح پر کرده باشد از مشکلات آتی جلوگیری میکند. علاوه بر این در مواقعی، فردی که فرم را پر میکند، لزوما کاربر اصلی سایت نیست و هدفی به غیر از هدف اصلی فرم دارد. باید توجه داشت که اگر داده های ورودی از فرم ها به خوبی بررسی و پاکسازی نشوند، میتوانند به عنوان مهمترین وسیله نفوذ به سیستم تلقی شوند. برای جلوگیری از این مسائل باید داده های ورودی از فرم ها را قبل از پردازش و ارسال به پایگاه داده، بررسی و پاکسازی کنیم. استفاده از عبارات منظم (Regular Expressions) میتواند برای این موضوع مناسب باشد، که در زیر به انواع داده های فرم و نحوه اعتبار سنجی آن توسط عبارات منظم در PHP اشاره شده است:

۱- اعتبار سنجی و پاکسازی و بررسی وجود ایمیل با PHP

اعتبار سنجی فرم ایمیل:
اعتبار سنجی فرم ایمیل را میوانید به ۳ روشی که در زیراشاره میشود انجام دهید. اولین روش به این صورت است:

کد php:
function isValidEmail($email){
        return 
eregi('^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$'$email);

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

کد php:
function isValidEmail($email){
        return 
preg_match('/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i'$email);

و اگر از PHP 5.2 به بالا استفاده میکنید میتوانید از این روش فرم ایمیل رو اعتبار سنجی کنید:

کد php:
function fnValidateEmail($email)
{
  return 
filter_var($emailFILTER_VALIDATE_EMAIL);

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

کد php:
function fnSanitizeEmaill($string) {
     return  
preg_replace'((?:\n|\r|\t|%0A|%0D|%08|%09)+)i' ''$string );

و یا در PHP 5.2 به بالا از روش زیر برای پاکسازی استفاده کنید:


کد php:
function fnSanitizeEmaill($url)
{
  return 
filter_var($urlFILTER_SANITIZE_EMAIL);

بررسی وجود ایمیل با php :
این کار امکان پذیر نیست ولی میشود تا حد زیادی با بررسی دامنه ایمیل از وجود آن مطلع شد:

کد php:
function check_email($email)
{
        
$email_error false;
        
$Email htmlspecialchars(stripslashes(strip_tags(trim($email)))); //parse unnecessary characters to prevent exploits
        
if ($Email == '') { email_error true; }
        elseif (!
eregi('^([a-zA-Z0-9._-])+@([a-zA-Z0-9._-])+\.([a-zA-Z0-9._-])([a-zA-Z0-9._-])+'$Email)) { email_error true; }
        else {
        list(
$Email$domain) = split('@'$Email2);
                if (! 
checkdnsrr($domain'MX')) { email_error true; }
                else {
                
$array = array($Email$domain);
                
$Email implode('@'$array);
                }
        }
 
        if (
email_error) { return false; } else{return true;}

۲ – اعتبار سنجی و پاکسازی اعداد با PHP

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

کد php:
function fnValidateNumber($value)
{
        
#is_ double($value);
        #is_ float($value);
        #is_ int($value);
        #is_ integer($value);
        
return is_numeric($value);

و در PHP 5.2 وبالاتر به این شکل عمل میکنیم:

کد php:
function fnValidateNumber($value)
{
        
#return filter_var($value, FILTER_VALIDATE_FLOAT); // float
        
return filter_var($valueFILTER_VALIDATE_INT); # int

پاکسازی اعداد:
با استفاده از تابع زیر میتوانیم اعداد داخل فرم را پاکسازی کنیم:

کد php:
function fnSanitizeNumber($str)
{
        
#letters and space only
        
return preg_match('/[^0-9]/'''$str);

و در PHP 5.2 به بالا:

کد php:
function fnSanitizeNumber($value)
{
        
#return filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT); // float
        
return filter_var($valueFILTER_SANITIZE_NUMBER_INT); # int

۳ – اعتبار سنجی و پاکسازی رشته ها در PHP

اعتبار سنجی رشته ها:
بیشتر در اعتبار سنجی نام و نام خانوادگی و .. به کار میرود و فقط حروف و فاصله را قبول میکند:
کد php:
function fnValidateStringr($str)
{
        
#letters and space only
        
return preg_match('/^[A-Za-z\s ]+$/'$str);

پاکسازی رشته ها:
برای پاک کردن فرم از کاراکترهای غیر رشته ای به کار میرود:

کد php:
function fnSanitizeStringr($str)
{
        
#letters and space only
        
return preg_replace('/[^A-Za-z\s ]/'''$str);

در PHP 5.2 و بالاتر میتوان از توابع قدرتمند داخلی PHP استفاده کرد:

کد php:
function fnSanitizeStringr($str)
{
        return 
filter_var($strFILTER_SANITIZE_STRIPPED); # only 'String' is allowed eg. '<br>HELLO</br>' => 'HELLO'

۴ – اعتبار سنجی و پاکسازی اعداد و حروف در PHP:

اعتبار سنجی اعداد و حروف:
تابع زیر فرم را بررسی میکند تا فقط حروف و اعداد به کار رفته باشد:

کد php:
function fnValidateAlphanumeric($string)
{
        return 
ctype_alnum ($string);

پاکسازی حروف و اعداد:
با تابع زیر میتوان داده گرفته شده از فرم را پاکسازی کرد به طوری که فقط حروف و اعداد باقی بمانند، به این صورت که کارکترهایی مانند (! و @ و ؟ و…) حذف میشوند:


کد php:
function fnSanitizeAlphanumeric($string)
{
        return 
preg_replace('/[^a-zA-Z0-9]/'''$string);

۵ – اعتبار سنجی و پاکسازی و بررسی وجود URL در PHP

اعتبار سنجی URL:
تابع زیر از صحیح بودن فرمت آدرس URL اطمینان حاصل میکند:


کد php:
function fnValidateUrl($url){
return 
preg_match('/^(http(s?):\/\/|ftp:\/\/{1})((\w+\.){1,})\w{2,}$/i'$url);


و در PHP 5.2 به بالا به صورت:

کد php:
function fnValidateUrl($url)
{
  return 
filter_var($urlFILTER_VALIDATE_URL);

پاکسازی URL:
در PHP 5.2 به بالا به صورت زیر است:

کد php:
function fnSanitizeUrl($url)
{
  return 
filter_var($urlFILTER_SANITIZE_URL);

بررسی وجود URL:
با تابع زیر میتوانید از وجود یک url اطمینان حاصل کنید:


کد:
function url_exist($url)
{
        $url = @parse_url($url);

        if (!$url)
        {
                return false;
        }

        $url = array_map('trim', $url);
        $url['port'] = (!isset($url['port'])) ? 80 : (int)$url['port'];
        $path = (isset($url['path'])) ? $url['path'] : '';

        if ($path == '')
        {
                $path = '/';
        }

        $path .= (isset($url['query'])) ? '?$url[query]' : '';

        if (isset($url['host']) AND $url['host'] != @gethostbyname($url['host']))
        {
                if (PHP_VERSION >= 5)
                {
                        $headers = @get_headers('$url[scheme]://$url[host]:$url[port]$path');
                }
                else
                {
                        $fp = fsockopen($url['host'], $url['port'], $errno, $errstr, 30);

                        if (!$fp)
                        {
                                return false;
                        }
                        fputs($fp, 'HEAD $path HTTP/1.1\r\nHost: $url[host]\r\n\r\n');
                        $headers = fread($fp, 4096);
                        fclose($fp);
                }
                $headers = (is_array($headers)) ? implode('\n', $headers) : $headers;
                return (bool)preg_match('#^HTTP/.*\s+[(200|301|302)]+\s#i', $headers);
        }
        return false;
}
بررسی وجود عکس در URL:
با تابع زیر میتونید متوجه بشوید که در Url گرفته شده عکسی وجود دارد یا خیر:

کد php:
function image_exist($url) {
if(@
file_get_contents($url,0,NULL,0,1)){return 1;}else{ return 0;}

۶ – اعتبار سنجی آدرس IP در PHP

تابع زیر آدرس IP خاصی را بررسی میکند:


کد php:
function fnValidateIP($IP){
        return 
preg_match('/^(([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5]).){3}([1-9]?[0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])$/',$IP)

و در PHP 5.2 و بالاتر:

کد php:
function fnValidateIP($ip)
{
  return 
filter_var($ipFILTER_VALIDATE_IP);

۷ – اعتبار سنجی نام کاربری در PHP:

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


کد php:
function fnValidateUsername($username){
        
#alphabet, digit, @, _ and . are allow. Minimum 6 character. Maximum 50 characters (email address may be more)
        
return preg_match('/^[a-zA-Z\d_@.]{6,50}$/i'$username);

۸ – اعتبار سنجی امنیت رمز عبور در PHP

برای بررسی امنیت رمزعبور داده شده توسط کاربر میتوانید از تابع زیر استفاده کنید که بررسی میکند تا رمز عبور حداقل ۸ کاراکتر تشکیل شود واز حروف بزرگ و کوچک و اعداد نیز استفاده کند.

کد php:
function fnValidatePassword($password){
        
#must contain 8 characters, 1 uppercase, 1 lowercase and 1 number
        
return preg_match('/^(?=^.{8,}$)((?=.*[A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z]))^.*$/'$password);

۹ – اعتبار سنجی تاریخ در PHP

اعتبار سنجی تاریخ با فرمت “MM-DD-YYYY” یا “MM-DD-YY” از ۰۰۰۰ تا ۹۹۹۹ :

کد php:
function fnValidateDate($date){
        
#05/12/2109
        #05-12-0009
        #05.12.9909
        #05.12.99
        
return preg_match('/^((0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01])[- /.][0-9]?[0-9]?[0-9]{2})*$/'$date);

اعتبار سنجی تاریخ با فرمت “YYYY-DD-MM” یا “YY-MM-DD” از ۰۰۰۰ تا ۹۹۹۹ :

کد php:
function fnValidateDate($date){
        
#2009/12/11
        #2009-12-11
        #2009.12.11
        #09.12.11
        
return preg_match('#^([0-9]?[0-9]?[0-9]{2}[- /.](0?[1-9]|1[012])[- /.](0?[1-9]|[12][0-9]|3[01]))*$#'', $date);

۱۰ – اعتبار سنجی کدپستی برای ایران در PHP

با تابع زیر میتوانید از صحیح بودن قالب بندی کد پستی اطمینان حاصل کنید:
کد php:
function fnValidateIRPostal($postalcode){
        
#eg. 56789-01234
        
return preg_match('/^([0-9]{5})(-[0-9]{5})?$/i',$postalcode);

۱۱ – ایمن سازی و پاکسازی Query و Data قبل از ارسال به پایگاه داده در PHP

تابع زیر داده های ما را برای جلوگیری از Sql Injection پاکسازی میکند:

کد php:
function _clean($str){
return 
is_array($str) ? array_map('_clean'$str) : str_replace('\\''\\\\'htmlspecialchars((get_magic_quotes_gpc() ? stripslashes($str) : $str), ENT_QUOTES));
}
 
//usage call it somewhere in beginning of your script
_clean($_POST);
_clean($_GET);
_clean($_REQUEST);// and so on.. 
و این تابع از حملات XSS و JS و Sql Injection با پاک کردن تگها جلوگیری میکند:
کد php:
function _clean($str){
return 
is_array($str) ? array_map('_clean'$str) : str_replace('\\''\\\\'strip_tags(trim(htmlspecialchars((get_magic_quotes_gpc() ? stripslashes($str) : $str), ENT_QUOTES))));
}
 
//usage call it somewhere in beginning of your script
_clean($_POST);
_clean($_GET);
_clean($_REQUEST);// and so on.. 

[تصویر:  a.jpg]

باور کنیم
همانگونه که در غیبت مقصریم در ظهور موثریم!
نیستیم؟

زیر شمشیر غمش رقص کنان باید رفت #  کان که شد کُشته ی او نیک سرانجام افتاد



 چشمک - بهینه شده برای ورژن جدید دانلود پروژه برنامه نويسي
۰۸-دى-۱۳۹۲, ۰۰:۵۷:۵۵
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : Ambassador, lord_viper, babyy, PouriaAmid, hamed_Arfaee, Ghasredasht, nImaarek
mghadimi73 آفلاین
تازه وارد

ارسال‌ها: 1
موضوع‌ها: 0
تاریخ عضویت: اردیبهشت ۱۳۹۸

تشکرها : 0
( 0 تشکر در 0 ارسال )
ارسال: #2
RE: اعتبار سنجی فرم ها با عبارات منظم در PHP
سلام چطور میتونم یه سایت آموزش برنامه نویسی شبیه سایت سون لرن بزنم که آموزش php و اموزش جاوا اسکریپت رو داخلش بفروشم ؟
(آخرین ویرایش در این ارسال: ۰۷-اردیبهشت-۱۳۹۸, ۲۰:۴۲:۳۴، توسط hadikh73.)
۰۷-اردیبهشت-۱۳۹۸, ۱۴:۴۷:۱۱
ارسال‌ها
پاسخ
hadikh73 آفلاین
مدیــر کـل سایـت
*******

ارسال‌ها: 1,194
موضوع‌ها: 42
تاریخ عضویت: شهریور ۱۳۹۱

تشکرها : 13325
( 14495 تشکر در 4623 ارسال )
ارسال: #3
RE: اعتبار سنجی فرم ها با عبارات منظم در PHP
(۰۷-اردیبهشت-۱۳۹۸, ۱۴:۴۷:۱۱)mghadimi73 نوشته است: سلام چطور میتونم یه سایت آموزش برنامه نویسی شبیه سایت سون لرن بزنم که آموزش php و اموزش جاوا اسکریپت رو داخلش بفروشم ؟
سلام میتونید از فروشگاه ساز های آماده استفاده کنید
یا میتونید از وردپرس و ووکامرس استفاده کنید

۰۷-اردیبهشت-۱۳۹۸, ۲۰:۴۳:۴۲
ارسال‌ها
پاسخ
تشکر شده توسط : babyy


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  گزارش گیری با php hadikh73 3 207 ۱۴-دى-۱۳۹۷, ۱۱:۵۴:۰۲
آخرین ارسال: lord_viper
  [سوال] عدم شناسایی کد php web_dev 3 439 ۲۵-آبان-۱۳۹۷, ۲۳:۰۷:۳۹
آخرین ارسال: web_dev
Question [سوال] xampp - تغییر ورژن PHP لوکال هاست برای نصب نسخه های قدیمی crafcrab 2 2,505 ۲۸-دى-۱۳۹۶, ۱۸:۴۲:۱۸
آخرین ارسال: babyy
  یک سوال برای شروع یادگیری php mehdi_hidden 8 2,914 ۰۸-آذر-۱۳۹۶, ۱۳:۱۶:۳۹
آخرین ارسال: fsohrabiii
Question [سوال] آموزش php unit crafcrab 3 1,802 ۲۵-خرداد-۱۳۹۶, ۱۰:۵۴:۱۸
آخرین ارسال: crafcrab
  [آموزشی] کتاب فارسی آموزش php از آقای رفوآ leyla_93 1 1,378 ۰۲-خرداد-۱۳۹۶, ۱۳:۳۷:۱۸
آخرین ارسال: babyy
  آموزشی مقدماتی پی اچ پی (PHP) Ghoghnus 12 4,643 ۰۶-اردیبهشت-۱۳۹۵, ۱۴:۳۲:۵۱
آخرین ارسال: Ghoghnus
Question [سوال] اعتبار سنجی فرم آپلود عکس با استفاده از یک کلاس crafcrab 2 1,392 ۱۳-آبان-۱۳۹۴, ۰۹:۴۸:۵۹
آخرین ارسال: lord_viper
  [آموزشی] مجموعه آموزشی php bghad1 2 2,332 ۲۷-اسفند-۱۳۹۳, ۱۴:۵۱:۱۷
آخرین ارسال: bghad1
  [پروژه] زندیق فریمورک php morrning 28 12,116 ۱۲-مهر-۱۳۹۳, ۱۳:۵۷:۴۹
آخرین ارسال: morrning

پرش به انجمن:


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

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS