Y.P.Y
Well-Known Member
نکات و اصول مهم در برنامه نویسی(1#)
نکات و اصول مهم در برنامه نویسی(1#):
1- هرگز فایل های ضمیمه شده رو با پسوند inc. ذخیره نکنید. یعنی name.class.inc رو به name.class.php تغییر بدید. و یا از .HTAccess یا HT برای تعیین سطح دسترسی inc. استفاده کنید.
با اینکار از دسترسی مستقیم و خواندن محتوای فایل توسط URL / Adress bar جلوگیری می کنید.
2- حتاًالمکان تگ های اضافی و فضا های خالی را حذف کنید و از باز و بسته کردن بیش از حد تگهای <?php ?> سرور خودداری کنید. (مخصوصاً در پروژه های سنگین)
اینکار به مقدار قابل توجهی در سرعت پردازش سورس PHP تون تاثیر میزاره.
3- کلاس را با متد __construct یا نام کلاس شروع کنید و با متد __destruct پایان دهید. و تمامی فیلد داخل کلاس رو درون متد __destrunt با دستور unset نابود کنید. اگر هم از ارث بری کلاس استفاده نمی کنید، کلاس و متد ها را با کلمه کلیدی final آغاز کنید.
4- برای Escape کردن کاراکترهای ویژه و جلوگیری از خیلی از حملات SQL میتونید از توابع addslashes یا mysql_real_escpe_string و... استفاده کنید.
5- اگر از Object cloning استفاده نمی کنید، در کلاس خود از متد پیش فرض __clone برای جلوگیری از تقلید(Clone)(شبیه سازی) کلاس استفاده کنید.
6- هرگز از Cookie برای ذخیره کلمه رمز یا مقادیر نمایشی استفاده نکنید. (میدونید که قابل تغییر هستند)
7- در خط اول هر فایل PHP، بعد از خطا زدایی کامل سورس، دستور (error_reporting(0 را قرار بدید که تمامی خطا ها و هشدار ها ignore بشن تا از سو استفاده های احتمالی جلوگیری بشه. یا از
استفاده کنید.
8- حتاًامکان از پارامتر $_GET برای دریافت مقادیر(فرم/url) استفاده نکنید. پارامتر $_REQUEST یا $_POST رو جایگزینش کنید. Request شامل GET, POST, Cookie هستش. (مقادیر ورودی رو هم فیلتر کنید).
برای حذف $_COOKIE از $_REQUEST هم می تونید از عبارت زیر استفاده کنید:
10- در اول هر کلاس و توابع مشکوک به compability، حتماً بودن کلاس و تابع رو چک کنید:
11- هرگز از روش زیر برای آدرس دهی(Action) استفاده نکنید:
چراکه قابل تغییر و دستکاری هستند. (برای حملات (XSS(Cross Side Scripting)
راه حل:
یا داخل تابع htmlspecialchars قرارش بدید.
نکات و اصول مهم در برنامه نویسی(1#):
1- هرگز فایل های ضمیمه شده رو با پسوند inc. ذخیره نکنید. یعنی name.class.inc رو به name.class.php تغییر بدید. و یا از .HTAccess یا HT برای تعیین سطح دسترسی inc. استفاده کنید.
با اینکار از دسترسی مستقیم و خواندن محتوای فایل توسط URL / Adress bar جلوگیری می کنید.
2- حتاًالمکان تگ های اضافی و فضا های خالی را حذف کنید و از باز و بسته کردن بیش از حد تگهای <?php ?> سرور خودداری کنید. (مخصوصاً در پروژه های سنگین)
اینکار به مقدار قابل توجهی در سرعت پردازش سورس PHP تون تاثیر میزاره.
3- کلاس را با متد __construct یا نام کلاس شروع کنید و با متد __destruct پایان دهید. و تمامی فیلد داخل کلاس رو درون متد __destrunt با دستور unset نابود کنید. اگر هم از ارث بری کلاس استفاده نمی کنید، کلاس و متد ها را با کلمه کلیدی final آغاز کنید.
4- برای Escape کردن کاراکترهای ویژه و جلوگیری از خیلی از حملات SQL میتونید از توابع addslashes یا mysql_real_escpe_string و... استفاده کنید.
5- اگر از Object cloning استفاده نمی کنید، در کلاس خود از متد پیش فرض __clone برای جلوگیری از تقلید(Clone)(شبیه سازی) کلاس استفاده کنید.
PHP:
class MyClass
{
final public function __clone()
{
exit;
}
}
6- هرگز از Cookie برای ذخیره کلمه رمز یا مقادیر نمایشی استفاده نکنید. (میدونید که قابل تغییر هستند)
7- در خط اول هر فایل PHP، بعد از خطا زدایی کامل سورس، دستور (error_reporting(0 را قرار بدید که تمامی خطا ها و هشدار ها ignore بشن تا از سو استفاده های احتمالی جلوگیری بشه. یا از
PHP:
ini_set('error_log', 'logs/error.log');
8- حتاًامکان از پارامتر $_GET برای دریافت مقادیر(فرم/url) استفاده نکنید. پارامتر $_REQUEST یا $_POST رو جایگزینش کنید. Request شامل GET, POST, Cookie هستش. (مقادیر ورودی رو هم فیلتر کنید).
برای حذف $_COOKIE از $_REQUEST هم می تونید از عبارت زیر استفاده کنید:
PHP:
$_REQUEST = array_merge($_GET, $_POST);
10- در اول هر کلاس و توابع مشکوک به compability، حتماً بودن کلاس و تابع رو چک کنید:
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>
راه حل:
PHP:
$_PHPSelf = basename(__file__);
$_Server['PHP_Self'] = substr($_Server['PHP_Self'], 0, strpos($_Server['PHP_Self'], $_PHPSelf)) . $_PHPSelf;
آخرین ویرایش: