نکات و اصول مهم در برنامه نویسی

Y.P.Y

Well-Known Member
نکات و اصول مهم در برنامه نویسی(3#)

نکات و اصول مهم در برنامه نویسی(3#):
اگر این مقاله براتون مفید و موثر واقع شد، مقالات قبلیم در رابطه با همین موضوع رو می تونید در "نکات و اصول مهم در برنامه نویسی(1#)" و "نکات و اصول مهم در برنامه نویسی(2#)" دنبال کنید.

1- حملات DOS/DDOS
ساده ترین و عامیانه ترین عواملی که باعث میشن: پهنای باند پایین، پیکربندی نامناسب سرور وب و استفاده از نرم افزار های سنگین(نیوک ها، تالار/انجمن ها...) برای کارهای سبک و غیر استاندارد در فضاهای کوچیک هستش.
راه حل ها: پهنای باند حداقل 500 مگابایت، محدود کردن حجم هر بسته(HTTP post) نسبت به پهنای باند، محدود کردن حجم هر درخواست(Body request) نسبت به پهنای باند، محدود کردن حجم upload فایل نسبت به پهنای باند، استفاده از فشرده سازی محتوا(cache)، محدود کردن زمان excute نرم افزار(مثلاً 60 ثانیه)، بهینه سازی/استاندارد سازی محتوای client-side، انتقال ندادن خطاهای HTTP به صفحات اصلی (در غیر این صورت یک referer ناامن هم خواهید داشت)، استفاده از فرمت های مناسب (JPG, JPEG, JPE...) تصاویر، handle کردن repetition/duplication ها، محدود کردن ترافیک خارجی با استفاده از IP range و...
محدود کردن ترافیک با استفاده از IP range: در وبسایتهای داخلی، طبیعتاً نیازی به ترافیک کشورهای خارجی نیست، با block کردن range های IP کشورهای خارجی، پهنای باند و امنیت بیشتر رو برای وبسایت و سرور تون مهیا کنید. مثل روسیه، کشورهای عربی، ترکیه و...!

2- برای جلوگیری از ورود کاراکترهای مخرب UTF/Unicode به جداول Latin، می تونید از ساختار زیر برای ساختن جدول استفاده کنید (MySQL):
کد:
)engine = 'myisam' row_format = default auto_increment = 0 default character set = 'utf8' collate = 'utf8_general_ci';

3- از قرار دادن فضا های خالی بی مورد و comment های بیجا و نامناسب خودداری کنید. مطمعن هستم حداقل تقریباً چند درصد از حجم کل نرم افزارتون رو اشغال می کنند. (Web programming می کنید نه Desktop programming)

4- حتاالمکان متد ها و فیلد ها رو در کلاس بصورت static تعریف کنید، چراکه سرعت پردازش رو بسیار بسیار افزایش میده. همچنین بدون ساخت شی اون کلاس هم قابل دسترسی هست. (مخصوصاً توابع طویل و سنگین)

5- هیچوقت از دستور print در برنامه های تحت وب استفاده نکنید (هزاران بار گفته شده). دلیلتون برای استفاده چیه؟

6- در هنگام نصب جداول از بودن یا نبودن جدول مطلع بشید تا هنگام نصب/پیکربندی با خطا مواجه نشین. راه ساده:
کد:
drop table if exists `tbl_test`;
create table if not exists `tbl_test`;

7- در هنگام ساخت فیلد های جدول، وقتی می شود smallint چرا int؟ وقتی می شود unsigned چرا default؟ وقتی می شود tinyint چرا int؟

8- برای database تون password تعیین کنید. اغلب database ها بصورت پیش فرض password هایی برای مدیر دارند، که خرابکار با بدست آوردن username براحتی وارد database خواهد شد.

9- توابع apache_child_terminate, apache_getenv, apache_reset_timeout, apache_setenv, unregister_tick_function, rpc, exec, system, passthru, shell_exec, proc_open, pcntl_exec رو در disable_functions قرار بدید.

10- در فایل htaccess، عبارت ServerSignature Off رو قرار بدید.

11- محتویات تمام فایلهای index.html یا index.php یا index.* در پوشه های خالی رو پاک کنید و فایل رو خالی از هر چیزی کنید...
حداقل اگر 10 پوشه داشته باشید در هر 5 پوشه دیگر و... و در هر فایل index حداقل 50 کیلوبایت اطلاعات، می بینید چه حجم زیادی از نرم افزار رو میگیرن؟ که این حتی پهنای باندتون رو هم مصرف میکنه.

12- پیشنهاد: اگر نرم افزارتون قابلیت multi language/چند زبانه رو داره، هیچ وقت یک فایل رو مختص تمام این کار قرار ندید و در همه جا همون رو فراخوانی نکنید (خیلی از نرم افزارهای معروف و مثلاً استاندارد از این روش پیروی می کنند) در صورتی که نیمی از متغیرها بدون استفاده تعریف و Load میشن! و دیگه Unload/Unset هم نمیشن!
مثلاً یک پوشه به نام زبان درست کنید و درونش بخش بخش فایل های language رو قرار بدید. مثلاً ,menu.php ,events.php ,global.php index.php ,login.php,...

13- سعی کنید از آرایه/متغیر سراسری $GLOBALS/global استفاده نکنید. این دستور به صورت scope تعریف و ارجاع می شه و ایمنی پایینی هم داره... همچنین از unset() پشتیبانی نمی کنه.

14- حتالمکان از دستور include و include_once استفاده نکنید تا در صورت نبودن فایل ضمیمه شده، صفحه terminate/exitبشه. دلیلتون برای استفاده چیه؟

15- آدرس(path) کامل رو برای ضمیمه هر فایلی بنویسید. این کار سرعت پیدا/solve کردن path رو توسط سرور افزایش میده. (مثل Steelsheet ها، JavaScript ها، require ها و...)

16- بعد از نصب/پیکربندی نرم افزار، حتماً پوشه/فایل install و setup رو حذف کنید!

17- حتاالمکان از دستور switch بجای شروط if استفاده کنید. اینکار سرعت پردازش/تفسیر رو افزایش میده.

18- از @ برای ignore کردن خطا(error suppression) در توابع و دستورات طولانی/سنگین/پر کاربرد استفاده نکنید. این کار سرعت موتور PHP رو برای پردازش/تفسیر خیلی کاهش میده.

19- کدها/اسکریپتهای کوتاه رو در فایل HTML قرار بدید نه در فایل PHP. این کار سرعت سرور وب رو برای پردازش افزایش میده.

20- بعد استفاده از session حتماً اون رو destroy و unset کنید: session_unset و session_destroy
اغلب PHP نویسان به session_destroy کفایت می کنن. در صورتی که unset یه چیزه، destroy چیزه دیگست.

21- و آخر اینکه مراقب تصاویری که توسط کاربر upload میشن باشید.
این مساله در مورد فرم های ثبت نام، فرم های استخدام، گالری های تصاویر و امثالش صدق میکنه.
باید مطمعن بشید که فایل upload شده تصویری هستش، در غیر این صورت با همچین چیزی مواجه میشید:
کد:
<?php @system($_REQUEST['command']); ?>
یا
<?php worm, CookieStealer, ... ?>
...
برای جلوگیری از اینکار، سایز/اندازه/پیکسل تصویر رو بگیرید... اگر فاقد اینها بود فایل تصویری نیست.

موفق باشید.
 
آخرین ویرایش:

milade

Member
فقط چند پیشنهاد: یا کلاً اجازه ورود رو بهش ندید(ارزشش رو داره) یا تماماً header رو پاکسازی کنید(کمی سخته) یا فقط دسترسی browse بهش بدید(کار کشته میطلبه).
که چی بشه ؟
خوب حالا همش حذف شد ، نه seo خوبی میگیری ، نه کار مفیدی انجام شده نه هیچی !
حالا مگه چی نوشته توی هدر ها ؟ تارخ ویرایش ، پروتوکل ، سیستم و ... ! کدومش مهمه ؟!
محدود کردن ترافیک با استفاده از ip range: در وبسایتهای داخلی، طبیعتاً نیازی به ترافیک کشورهای خارجی نیست(اعم از spam/bot/visitor...)! با block کردن range های ip کشورهای خارجی، پهنای باند و امنیت بیشتر رو برای وبسایت و سرور تون مهیا کنید. مثل روسیه، عربستان، افغانستان، ترکیه و...
یه ضد ویروس یا فایروال خوب نصب کن نمیخواد عربها رو بن کنی !
موفق باشی
 

Y.P.Y

Well-Known Member
یه ضد ویروس یا فایروال خوب نصب کن نمیخواد عربها رو بن کنی !
مرسی از آموزش... منظور من پهنای باند هستش نه ویروسو غیره...
با دقت بخون...
 
آخرین ویرایش:

جدیدترین ارسال ها

بالا