عضویت سریع

دریافت نیوک لرن

تبلیغات

خوراک های نیوک لرن

اخبار
دانلودي ها
آخرين نظرات
وبلاگ سایت

برچسب های برتر

محصولات

20 کد اعتبارسنجی و ایمن سازی ضروری زبان PHP

PHPPHP,يکشنبه، 1 آذر، 1388 4091Aneeshtan


اعتبارسنجی و تمیز دادن اطلاعات ورودی یکی از موضوعات مهم برنامه نویسی ( حال در هر زبانی ) است .  ما در این مقاله به بررسی تکه کدهای مورد نیاز برای ایمن سازی و اعتبارسنجی اطلاعات ورودی  می پردازیم استفاده مناسب از توابع زبان  و دانستن کدهای موردنیاز  یکی از ابزارهای مهم برنامه نویسی  است .

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

در ادامه مطلب شما شاهد 20 تکه کد ( تابع )  زبان  php  هستید که  بصورت خیلی ساده برای شما آورده شده است .



اعتبار سنجی ایمیل

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

 

function isValidEmail($email){
	return eregi('^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)*(.[a-z]{2,3})$', $email);
}
 
و برای PHP نسخه 5.2  به بالا :
 
function fnValidateEmail($email)
{
  return filter_var($email, FILTER_VALIDATE_EMAIL);
}

تمیز کردن ایمیل ورودی

حالا با تابع زیر می توان به راحتی ایمیل ورودی را از یکسری فیلتر رد کنیم و  آن را تمیز کنیم .

function fnSanitizeEmaill($string) {
     return  preg_replace( '((?:n|r|t|%0A|%0D|%08|%09)+)i' , '', $string );
}
و برای PHP نسخه 5.2  به بالا :
function fnSanitizeEmaill($url)
{
  return filter_var($url, FILTER_SANITIZE_EMAIL);
}

بررسی موجودیت ایمیل

از نظر نظری این امکان عملی نیست  اما با یک سری  توابع می توان چنین عملی را به واقعیت نزدیک کرد :

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('@', $Email, 2);
		if (! checkdnsrr($domain, 'MX')) { email_error = true; }
		else {
		$array = array($Email, $domain);
		$Email = implode('@', $array);
		}
	}

	if (email_error) { return false; } else{return true;}
}

 

اعتبارسنجی اعداد

از توابع موجود در دستور  PHP  می تواند پی به عدد بودن ورودی برد :

 

function fnValidateNumber($value)
{
	#is_ double($value);
	#is_ float($value);
	#is_ int($value);
	#is_ integer($value);
	return is_numeric($value);
}

و برای PHP نسخه 5.2  به بالا :

function fnValidateNumber($value)
{
	#return filter_var($value, FILTER_VALIDATE_FLOAT); // float
	return filter_var($value, FILTER_VALIDATE_INT); # int
}

تمیز کردن اعداد

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

function fnSanitizeNumber($str)
{
	#letters and space only
	return preg_match('/[^0-9]/', '', $str);
}
و برای PHP نسخه 5.2  به بالا :
function fnSanitizeNumber($value)
{
	#return filter_var($value, FILTER_SANITIZE_NUMBER_FLOAT); // float
	return filter_var($value, FILTER_SANITIZE_NUMBER_INT); # int
}

اعتبارسنجی حروف

گاهی نیاز است از ورودی  جز حروف  و خط فاصله جلوگیری کرد  مانند نام خانوادگی که نیازی به ب

function fnSanitizeStringr($str)
{
	#letters and space only
	return preg_match('/[^A-Za-zs ]/', '', $str);
}

تمیز کردن حروف

گاهی اصلا لزومی ندارد اعتبار ورودی را از نظر حرف بودنش  بررسی کرد و کافی است ورودی را تمیز کرد و اگر  کارکتری جز کارکترهای مجاز حروف بود آن را تمیز کرد.

 

function fnSanitizeStringr($str)
{
	#letters and space only
	return preg_replace('/[^A-Za-zs ]/', '', $str);
}
و برای PHP نسخه 5.2  به بالا :

function fnSanitizeStringr($str)
{
	return filter_var($str, FILTER_SANITIZE_STRIPPED); # only 'String' is allowed eg. '<br>HELLO</br>' => 'HELLO'
}

اعتبارسنجی کارکترهای الفبایی (a-z   و  0-9)

این تابع می تواند اعتبار ورودی را از بودن کارکترهای الفبایی بررسی کنید a-z   و  0-9

function fnValidateAlphanumeric($string)
{
	return preg_match('/[^a-zA-Z0-9s]/', '', $string);
}

تمیز دادن کارکترهای الفبایی

برخلاف اعتبار سنجی که جوابش بلی یا خیر است این تابع می تواند تمیز بدهد  و مثلا  ؟  را از یک جمله حذف کند

function fnSanitizeAlphanumeric($string)
{
	return preg_replace('/[^a-zA-Z0-9s]/', '', $string);
}

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

این تابع می توان موجودیت آدرس اینترنتی را بررسی کند .

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.1rnHost: $url[host]rnrn');
			$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 ورودی

تابع زیر می تواند  ساختار صحیح آدرس ورودی را بررسی  کند.

function fnValidateUrl($url){
return preg_match('/^(http(s?)://|ftp://{1})((w+.){1,})w{2,}$/i', $url);
}
و برای نسخه بالاتر 5.2 

 

function fnValidateUrl($url)
{
  return filter_var($url, FILTER_VALIDATE_URL);
}

تمیز دادن آدرس URL

تنها برای PHP 5.2  امکانش هست :

 

function fnSanitizeUrl($url)
{
  return filter_var($url, FILTER_SANITIZE_URL);
}



اعتبارسنجی موجودیت عکس

تابع زیر می تواند عکس مورد نظر را از نظر موجودیت آن  تست کند .

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

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

 

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)
}

و برای نسخه بالاتر 5.2 

function fnValidateIP($ip)
{
  return filter_var($ip, FILTER_VALIDATE_IP)
}

اعتبارسنجی پراکسی

این تابع می تواند بررسی کند که بازدیدکننده شما از پراکسی استفاده می کند یا خیر . حتی کسانی که از پراکسی های ناشناس استفاده می کنند.

 

function fnValidateProxy(){
	if ($_SERVER['HTTP_X_FORWARDED_FOR']
	   || $_SERVER['HTTP_X_FORWARDED']
	   || $_SERVER['HTTP_FORWARDED_FOR']
	   || $_SERVER['HTTP_VIA']
	   || in_array($_SERVER['REMOTE_PORT'], array(8080,80,6588,8000,3128,553,554))
	   || @fsockopen($_SERVER['REMOTE_ADDR'], 80, $errno, $errstr, 30))
	{
		exit('Proxy detected');
	}
}

اعتبارسنجی نام کاربری

واضح است که نام کاربری در هر سایتی یکسری قوانین لازم دارد . حداقل 6 حرف و حداکثر  50 کارکتر   خوب برای تست اعتبار نام کاربری می توان مثال زیر را زد  :

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

اعتبارسنجی قدرت رمزعبور ورودی

خوب این تابع بسیار می تواند مفید باشد . چرا که  انتخاب یک رمز مناسب و با کفیت می تواند در امنیت سایت ما نیز  مفید واقع شود . بر فرض مثال همین نیوک لرن که اعضای ویژه دارد یکی از  مسائل مهمش  استفاده کاربران از رمزهای قوی است تا فرد دومی به رمز آن ها دست پیدا نکند .

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);
}

 

اعتبارسنجی تاریخ

تابع زیر  ورودی را بر اساس تاریخ MM-DD-YYYY  یا MM-DD-YY  بررسی می کند .

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   بررسی کند

 

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);
}

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

function fnValidateColor($color){
	#CCC
	#CCCCC
	#FFFFF
	return preg_match('/^#(?:(?:[a-f0-9]{3}){1,2})$/i', $color);
}

ایمن کردن کوئری ( درخواست به بانک اطلاعاتی ) 

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

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..

ایمین کردن اطلاعات

با تابع  زیر می توان اطلاعات مورد نظر خود را از حملات JS و XSS و  بانک اطلاعاتی تمیز داد

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..

 


php پی اچ پی   validation  اعتبارسنجی   ایمن سازی   کد  Snippets 
درجه 0/5 (0%) (0 رای)

ارسال به بلینک لیست ارسال به خوشمزه ارسال به ديگ ارسال به فرل ارسال به ردديت ارسال به تکنوراتي ارسال به یاهو مای وب ارسال به 100 درجه کلوب ارسال به بالاترین ارسال به دنباله ارسال به مهندس ارسال به استامبل ارسال به نتوز ارسال به فرندفید ارسال به تویتر ارسال به فیس بوک ارسال به سیمپی ارسال به Windows Live اشتراک گذاری در گوگل ارسال لینک از طریق یاهو مسنجر برای دوستان ارسال به سرویسهای دیگر

 مطالب بیشتر در مورد PHPPHP,
· سایر مطالب نوشته شده توسط Aneeshtan

پربازدیدترین مطلب در زمینه ترفندها و مقالات آموزشی PHP:44


بازدیدکنندگان غیر عضو حق ارسال نظر و پیشنهاد در مورد مطالب این سایت ندارند .
برای استفاده از سرویسهای مخصوص کاربران عضو فرم عضویت را تکمیل نمائید .



مدت زمان ایجاد صفحه : 0.29 ثانیه
تعداد ارتباط : 50
حافظه درگیر: 1.95 مگابایت

Copyright @2008-2011 Nukelearn CMS|   Email  | XML| license |[Valid Atom 1.0] [Valid RSS]


با کلیک روی 1+ از سایت ما حمایت کنید