1- هرگز فايل هاي ضميمه شده رو با پسوند inc. ذخيره نکنيد! يعني name.class.inc رو به name.class.php تغيير بديد. و يا از .HTAccess براي تعيين سطح دسترسي inc. استفاده کنيد.
2- حتاًالمکان تگ هاي اضافي و فضا هاي خالي را حذف کنيد و از باز و بسته کردن بيش از حد تگهاي سرور خودداري کنيد(مخصوصاً در پروژه هاي سنگين).
3- کلاس را با Final و Initialize/__construct شروع کنيد و با __destruct پايان دهيد و با قرار دادن ; در آخر کلاس کامل ببندينش:
final class Name { public function Name() { } final public function __construct() { #... } final public function __destruct() { #... } }; |
4- براي Escape کردن کاراکترهاي ويژه و جلوگيري از خيلي از حملات SQL از دستورات زير استفاده کنيد:
کد PHP:
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:
final public function __clone() { exit; } |
6- هرگز از Cookie براي ذخيره کلمه رمز يا مقادير نمايشي استفاده نکنيد(قابل تغيير هستند).
7- در خط اول هر فايل PHP، بعد از خطا زدايي کامل صفحه، دستور (error_reporting(0 را قرار بديد که تمامي خطا ها و هشدار ها ignore بشن. تا از سو استفاده هاي احتمالي جلوگيري بشه.
8- حتاًامکان از دستور GET_$ براي دريافت مقادير استفاده نکنيد. و به جاش از دستور REQUEST_$ استفاده کنيد(مقدارش رو هم فيلتر کنيد): Request شامل GET, POST, Cookie مي باشد.
10- در اول هر کلاس و تابع حتماً وجود و بودن کلاس و تابع رو چک کنيد!
کد PHP:
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) استفاده نکنيد:
کد PHP:
<form name="Frm_Test" action="<?= $_Server['PHP_Self'] ?>" method="post" target="_self"> ... </form> |
چراکه قابل تغيير و دستکاري هستند(براي حملات (XSS(Cross Side Scripting).
راه حل:
کد PHP:
$_PHPSelf= @basename(__File__); $_Server['PHP_Self]= @substr($_Server['PHP_Self'], 0, @strpos($_Server['PHP_Self], $_PHPSelf)) . $_PHPSelf; |
13- حتماً تمامي خروجي ها/ورودي ها رو به نوع مربوطش تبديل کنيد:
کد PHP:
echo((string)'Test ' . $_Var_Test); return((string)$_Str_Test); return((int)$_Int_Test); |
14- و در آخر، بهتر و ايمن تره اگر تمامي تگ ها و بلاک ها رو کامل مشخص کنيد و کامل ببنديد:
حافظه و Parser هم دچار مشکل نميشه.
کد PHP:
if(...): ... endif; if(...): ... else(...): ... endif; if(...): ... elseif(...): ... else(...): ... endif; if(...) { ... }; if(...): ... { ... } else { ... }; while(...): endwhile; while(...) { }; for... foreach... ... |
در مقاله بعدي تعداد ديگه اي از اين نکات و اصول مهم رو مي نويسم(سطح متوسط).
موفق باشيد.
منبع:http://forum.iranphp.org /س