1- حملات DOS/DDOS!
ساده ترين و عاميانه ترين عواملي که باعث ميشن: پهناي باند پايين، پيکربندي نامناسب سرور وب و استفاده از نرم افزار هاي سنگين(نيوک ها، تالار/انجمن ها...) براي کار هاي سبک و غير استاندارد هستش.
راه حل ها(در مورد همه زبانهاي تحت وب صدق ميکنه): پهناي باند حداقل 500 مگابايت، محدود کردن حجم هر بسته(HTTP post) نسبت به پهناي باند، محدود کردن حجم هر درخواست(Body request) نسبت به پهناي باند، محدود کردن حجم Upload فايل نسبت به پهناي باند، استفاده از فشرده سازي محتوا(Output)/Cache، محدود کردن زمان Excute نرم افزار(مثلاً 30 ثانيه)، بهينه سازي/استاندارد سازي محتواي Client-side، انتقال ندادن خطاهاي HTTP به صفحات اصلي(در غير اين صورت يک Referer خطرناک هم خواهيد داشت)، استفاده از فرمت هاي مناسب(JPG, JPEG, JPE...) تصاوير، Handing کردن Repetition/Duplication ها، محدود کردن ترافيک خارجي با استفاده از IP range و...
محدود کردن ترافيک با استفاده از IP range: در وبسايتهاي داخلي، طبيعتاً نيازي به ترافيک کشورهاي خارجي نيست(اعم از Spam/Bad bots/Visitor...)! با Block کردن range هاي IP کشورهاي خارجي، پهناي باند و امنيت بيشتر رو براي وبسايت و سرور تون مهيا کنيد. مثل روسيه، عربستان، افغانستان، ترکيه و...
2- پروتکل WAP
25% برنامه نويسان با اين پروتکل آشنايي ندارند، 50% آشنايي دارند ولي اهميتي نميدن، 25% مي شناسن و اهميت ميدن...
تنها چيزي که ميشه گفت: اين پروتکل همون قدر مفيد و قدرتمند هستش/همون قدر هم خطرناک.
فقط چند پيشنهاد: يا کلاً اجازه ورود رو بهش نديد(ارزشش رو داره) يا تماماً Header رو پاکسازي کنيد(کمي سخته) يا فقط دسترسي Browse بهش بديد(کار کشته ميطلبه).
3- براي جلوگيري از ورود کاراکترهاي مخرب UTF/Unicode به جداول Latin، از Option زير براي ساختن جدول استفاده کنيد(در مورد همه Database ها صدق ميکنه):
default charset= 'utf8' collate= 'utf8_general_ci';
4- از قرار دادن فضا هاي خالي بي مورد و Comment هاي بيجا و نامناسب خودداري کنيد. اينها تقريباً 15% از حجم کل نرم افزارتون رو ميگيرند!(Web programming ميکنيد نه Desktop programming).
5- حتالمکان توابع رو در کلاس بصورت static تعريف کنيد، چراکه سرعت پردازش/Compile رو بسيار بسيار افزايش ميده. همچنين بدون ساخت شي قابل دسترسي هست(مخصوصاً توابع طولاني و سنگين).
6- به هيچ وجه از دستور print در برنامه هاي تحت وب استفاده نکنيد(++9999E+ بار گفته شده). دليلتون براي استفاده چيه؟!
7- در هنگام نصب جداول از بودن يا نبودن جدول مطلع بشيد تا هنگام نصب/پيکربندي با خطا مواجه نشين. راه ساده:
drop table if exists `xxxxx`;
create table if not exists `xxxxx`;
8- حتاالمکان براي Database تون Password تعيين کنيد. اغلب Database ها بصورت پيش فرض Password هايي براي مدير دارند، که خرابکار با بدست آوردن Username براحتي وارد Database خواهد شد و...! پس براي Database تون Password تعيين کنيد.
9- تنضيمات پيشنهادي براي PHP:
asp_tags رو Off قرار بديد.
implicit_flush رو On قرار بديد.
expose_php رو On قرار بديد.
max_execution_time رو 30 قرار بديد.
max_input_time رو 30 قرار بديد.
default_socket_timeout رو 30 قرار بديد.
register_globals رو Off قرار بديد(++9999E+ بار گفته شده).
session.auto_start رو 0 قرار بديد.
default_mimetype رو text/html قرار بديد(سرعت بيشتر).
display_errors رو 1 قرار بديد.
بهتره log_errors رو Off قرار بديد.
بهتره DATABASE.allow_persistent رو Off قرار بديد.
بهتره DATABASE.max_persistent رو 1 قرار بديد.
حتاامکان DATABASE.default_user و DATABASE.default_password رو خالي بزاريد.
حتاامکان session.hash_function رو 1 قرار بديد(SHA1).
session.hash_bits_per_character رو 5 قرار بديد.
در حالت معمولي دليلي نداريد که safe_mode رو On قرار بديد.
و...
10- يک فايل htaccess درست کنيد(براي نرم افزارتون) و تنظيمات(اختياري) زير رو درونش قرار بديد(در حالت عادي):