1- هرگز فایل های ضمیمه شده رو با پسوند inc. ذخیره نکنید! یعنی name.class.inc رو به name.class.php تغییر بدید. و یا از .HTAccess برای تعیین سطح دسترسی inc. استفاده کنید.
<FilesMatch "\.(htaccess|inc)$">
Order Allow,Deny
Allow from localhost
Allow from 127.0.0.1
Deny from all
</FilesMatch>
2- حتاًالمکان تگ های اضافی و فضا های خالی را حذف کنید و از باز و بسته کردن بیش از حد تگهای سرور خودداری کنید(مخصوصاً در پروژه های سنگین).
3- کلاس را با __construct یا نام کلاس شروع کنید و با __destruct پایان دهید. اگر هم از ارث بری کلاس استفاده نمی کنید، کلاس و توابع را با کلمه کلیدی final آغاز کنید.
class MyClass
{
public function __construct()
{
# Codes...
}
}
class MyClass
{
public function MyClass()
{
# Codes...
}
}
final class MyClass
{
final public function MyClass()
{
# Codes...
}
final private function MyFunction()
{
# Codes...
}
}
4- برای Escape کردن کاراکترهای ویژه و جلوگیری از خیلی از حملات SQL از تابع زیر استفاده کنید:
function Safe_SQL($Str_Input)
{
if(get_magic_quotes_gpc()): function_exists('mysql_real_escape_string') ? stripslashes(mysql_real_escape_string(&$Str_Input)) : stripslashes(mysql_escape_string(&$Str_Input));
else: function_exists('mysql_real_escape_string') ? addslashes(mysql_real_escape_string(&$Str_Input)) : addslashes(mysql_escape_string(&$Str_Input));
endif;
return($Str_Input);
}
5- اگر از Object cloning استفاده نمی کنید، در کلاس خود از تابع پیش فرض clone__ برای جلوگیری از تقلید(Clone)(شبیه سازی) توابع استفاده کنید:
class MyClass
{
final public function __clone()
{
exit;
}
}
6- هرگز از Cookie برای ذخیره کلمه رمز یا مقادیر نمایشی استفاده نکنید(قابل تغییر هستند).
7- در خط اول هر فایل PHP، بعد از خطا زدایی کامل صفحه، دستور (error_reporting(0 را قرار بدید که تمامی خطا ها و هشدار ها ignore بشن. تا از سو استفاده های احتمالی جلوگیری بشه.
8- حتاًامکان از دستور GET_$ برای دریافت مقادیر استفاده نکنید. دستور REQUEST_$ را جایگزینش کنید(مقادیر ورودی رو هم فیلتر کنید): Request شامل GET, POST, Cookie می باشد.
10- در اول هر کلاس و تابع حتماً وجود و بودن کلاس و تابع رو چک کنید!
if(!extension_loaded('mysql')): exit('Extension MySQL not loaded.');
endif;
...
if(function_exists('mysql_real_escape_string')): mysql_real_escape_string(...);
else: mysql_escape_string(...);
endif;
...
11- هرگز از روش زیر برای آدرس دهی(Action) استفاده نکنید:
<form name="Frm_Test" action="<?= $_Server['PHP_Self'] ?>" method="post" target="_self">
...
</form>
چراکه قابل تغییر و دستکاری هستند(برای حملات (XSS(Cross Side Scripting).
راه حل:
$_PHPSelf= basename(__file__);
$_Server['PHP_Self']= substr(&$_Server['PHP_Self'], 0, strpos(&$_Server['PHP_Self'], &$_PHPSelf)) . $_PHPSelf;
در مقاله بعدی تعداد دیگه ای از این نکات و اصول مهم رو می نویسم(سطح متوسط).
موفق باشید.