1- هرگز فایل های ضمیمه شده رو با پسوند inc. ذخیره نکنید! یعنی name.class.inc رو به name.class.php تغییر بدید. و یا از .HTAccess برای سطح دسترسی inc. استفاده کنید.
2- حتاًالمکان تگ های اضافی و فضا های خالی را حذف کنید و از باز و بسته کردن بیش از حد تگهای سرور خودداری کنید. در عمل تفاوتی ندارند ولی در حجم و سرعت، به ازای هر 1 کاراکتر اضافی 1 بایت حجم فایل و صفحه و Loading میبره بالا(مخصوصاً در پروژه های سنگین)!
3- کلاس های خود را با قرار دادن ; کامل ببندید و کلاس را با Final و Initialize/__construct شروع کنید تا Clone نشوند:
PHP Code:
کد:
final class Name
{
final public function __construct()
{
#...
}
};
4- برای Escape کردن کاراکترهای ویژه و جلوگیری از خیلی از حملات SQL از دستورات زیر استفاده کنید:
PHP Code:
get_magic_quotes_gpc
کد:
? $Str_Input= @stripslashes($Str_Input) : $Str_Input= @addslashes($Str_Input);
if(function_exists('mysql_real_escape_string')): @mysql_real_escape_string($Str_Input);
else: @mysql_escape_string($Str_Input);
endif;
5- در کلاس خود از تابع پیش فرض clone__ برای جلوگیری از تقلید(Clone)(شبیه سازی) توابع استفاده کنید:
PHP Code:
کد:
final public function __clone()
{
return(@exit('Cloning is not allowed.'));
}
6- هرگز از Cookie/Session برای ذخیره کلمه رمز یا مقادیر نمایشی استفاده نکنید(قابل تغییر هستند). خیلی ها از جمله ... این مورد رو در نرم افزارشون رعایت نمی کنند و بارها آسیب های جدی و پیش پا افتاده ای رو متحمل میشن.
7- در خط اول هر فایل PHP، بعد از خطا زدایی کامل صفحه، دستور (error_reporting(E_ALL@ را قرار بدید که تمامی خطا ها و هشدار ها رو نمایش بده. تا از سو استفاده های احتمالی جلوگیری بشه.
8- حتاًامکان از دستور GET_$ برای دریافت مقادیر استفاده نکنید. و به جاش از دستور REQUEST_$ استفاده کنید(مقدارش رو هم ***** کنید).
9- حتماً تمامی دستورات Exit و Die رو با Ignore کردن خطا @ و بستن محتوا استفاده کنید:
PHP Code:
کد:
@exit(''); یا @die('');
10- در اول هر کلاس و تابع حتماً وجود و بودن کلاس و تابع رو چک کنید!
PHP Code:
کد:
if(!extension_loaded('standard')): @exit('Extension Standard not loaded!');
elseif(!extension_loaded('mysql')): @exit('Extension MySQL not loaded!');
elseif(!class_exists('ClassName')): @exit('Class ClassName not exists!');
endif;
...
if(function_exists('mysql_real_escape_string')): @mysql_real_escape_string(...);
else: @mysql_escape_string(...);
endif;
11- هرگز از روش زیر برای آدرس دهی(Action) استفاده نکنید:
PHP Code:
کد:
<form name="Frm_Test" action="<?= $_Server['PHP_Self'] ?>" method="post" target="_self">
...
</form>
چراکه قابل تغییر و دستکاری هستند(برای حملات (XSS(Cross Side Scripting).
راه حل:
PHP Code:
کد:
$_PHPSelf= @basename(__File__);
$_Server['PHP_Self]= @substr($_Server['PHP_Self'], 0, @strpos($_Server['PHP_Self], $_PHPSelf)) . $_PHPSelf;
13- حتماً تمامی خروجی ها رو به نوع مربوطش تبدیل کنید:
PHP Code:
کد:
echo((string)'Test ' . $_Var_Test);
return((string)$_Str_Test);
return((integer)$_Int_Test);
14- و در آخر، بهتر و ایمن تره اگر تمامی تگ ها و بلاک ها رو کامل مشخص کنید و کامل ببندید:
حافظه هم دچار مشکل نمیشه.
PHP Code:
کد:
if(...): ...
endif;
if(...): ...
else(...): ...
endif;
if(...): ...
elseif(...): ...
else(...): ...
endif;
if(...)
{
...
};
if(...): ...
{
...
}
else
{
...
};
while(...):
endwhile;
while(...)
{
};
for...
foreach...
...
در مقاله بعدی تعداد دیگه ای از این نکات و اصول مهم رو می نویسم(سطح متوسط).
موفق باشید.