• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
نکاتی برای افزایش امنیت وبسایت
#1
مکانیزم و شیوه کار پروتوکل HTTP رو کامل فرا بگیرید.

همیشه کتابخانه ها و فریم ورکهای استفاده شده در اپلیکیشن رو بروز نگه دارید!

جهت جلوگیری از click-jacking مقدار هدر X-Frame-Options رو DENY قرار بدید:

کد:
Apache httpd.conf:
Header always append X-Frame-Options DENY

Apache .htaccess:
Header append X-FRAME-OPTIONS "DENY"

Nginx:
add_header X-Frame-Options "DENY";

PHP:
header('X-Frame-Options: DENY');

بصورت هفتگی یا ماهیانه کل سایت رو توسط نرم افزارها و سایتهای اسکنر امنیتی چک کنید:

داده های ورودی توسط کاربر را بدقت بررسی، برش و فیلترسازی کنید!

برای اپلیکیشن، قابلیت debug mode درست کنید تا در مواقع لزوم بتونید فعالیت های اپلیکیشن رو مانیتور و خطازدایی کنید.

از تخصیص دسترسی نوع 666 یا 777 به فایلها/دایرکتوری ها خودداری کنید!

برای کاهش مصرف پهنای باند و افزایش سرعت سایت، حتاالمکان با استفاده از CSS طرح بصری ایجاد کنید نه با تصاویر.

همیشه log های اپلیکیشن رو قبل از ثبت یا ذخیره کردن فیلترسازی کنید!

هرگز تنظیمات اپلیکیشن های آماده CMS رو بحالت پیشفرض/default رها نکنید.

رمزهای ورود به بخش های مختلف سایت رو(FTP, Database, SSH, Admin...) طولانی و پیچیده انتخاب کنید.
مثل:
کد:
!bP8Zj&GeK3@[Jv&fXby4#^&3=fGS*X73$cr52

برای اینکار میتونید از نرم افزارهای password generator هم استفاده کنید.

بصورت روزانه، هفتگی یا ماهیانه از داده ها پشتیبان(backup) گیری کنید.

بروزترین، فعالترین و ایمن ترین ارائه دهنده ی هاست وب رو برای سایتتون انتخاب کنید.

همیشه محتویات کوکی رو قبل از set و بعد از get کردن فیلترسازی کنید!

حتاالمکان برای هر اپلیکیشن یک دیتابیس جداگانه درنظر بگیرید.

با تنظیم صحیح وبسرور و همچنین قرار دادن یک فایل (خالی) index.html و default.html در همه دایرکتوری های وب اپلیکیشن، از directory listing جلوگیری کنید.

کد:
Apache HTTPD:
Options All -Indexes

حتاالمکان سرور دیتابیس رو از سرور وب اپلیکیشن جدا کنید و در یک هاست دیگری قرار بدید.

با تنظیم صحیح وبسرور و کدنویسی، دسترسی به فایلها و دایرکتوری های حساس رو ممنوع کنید.

همیشه تصاویر اپلیکیشن رو فشرده و optimize کنید تا از حجمشون کاسته بشه:

همیشه از کتابخانه ها و فریم ورک های بروز، پایدار و ایمن در اپلیکیشن استفاده کنید.

از نصب theme و plugin های متفرقه در وب اپلیکیشن خودداری کنید!

هرگز نسخه‌های قدیمی نرم افزار یا فایلهای backup رو بر روی سرور Production نگهداری نکنید.

اکانت‌های پیش فرض در دیتابیس(MySQL, OracleDb, MsSQL...) رو حذف کنید.

همیشه اطلاعات version اپلیکیشن، دیتابیس، سیستم و وبسرور رو از دید کاربران مخفی کنید:

کد:
Apache HTTPD:
ServerSignature Off
ServerTokens Prod

PHP:
header('X-Powered-By:');

php.ini:
expose_php = Off

همیشه صحت پسوند، نوع، سایز و محتوای فایل آپلود شده توسط کاربر رو بررسی کنید و سپس به محلی دیگر با پسوندی متفاوت منتقل کنید.
درصورتیکه فایل مربوطه عکس هست، بهتره اونرو مجدد create کنید. همچنین با استفاده از API سایتهایی مثل virustotal.com میتونید از سلامت فایل اطمینان حاصل کنید.

درصورتیکه از referrer استفاده های معمول می کنید، مقدار متاتگ referrer رو no-referrer-when-downgrade قرار بدید:

کد:
HTML metatag:
<meta name="referrer" content="no-referrer-when-downgrade">

Apache httpd.conf:
Header set Referrer-Policy "no-referrer-when-downgrade"

Nginx:
add_header Referrer-Policy no-referrer-when-downgrade;

همیشه از prepared statement ها برای عملیات روی دیتابیس و دیتابیس اپلیکیشن ها استفاده کنید تا آسیب پذیری در مقابل حملات SQL Injection رو به حداقل برسونید. (PDO, JDBC, ADO.Net...)

همیشه validation ورودی ها و داده های کاربر رو در هر دو سمت Client و Server انجام بدید.

درصورتیکه از قابلیت share کردن response استفاده نمی کنید و یا وب اپلیکیشن CDN پیاده سازی نمی کنید، مقدار Access-Control-Allow-Origin رو روی دامنه سایت خودتون تنظیم کنید:

کد:
HTML:
<meta http-equiv="Access-Control-Allow-Origin" content="http://domain/"/>

Apache HTTPD:
Header set Access-Control-Allow-Origin "http://domain/"

PHP:
header('Access-Control-Allow-Origin: http://domain/');


قوانین CSS رو در صفحات بررسی کنید و از استاندارد های CSS و CSS2 و CSS3 بهره بگیرید تا با باگهای UI مواجه نشید.

از پیچاندن و مبهم کردن بیش از حد URL ها خودداری کنید. (پیچیدگی =! امنیت)

از نوشتن نام فایلها و دایرکتوری های مهم و حساس در داخل فایل robots.txt خودداری کنید!

هرگز رمزعبور رو بصورت متن ساده(plain text) ذخیره نکنید، ابتدا اونرو hash و سپس ذخیره کنید!

جهت جلوگیری از content sniffing، مقدار هدر X-Content-Type-Options رو  nosniff قرار بدید:

کد:
Apache httpd.conf:
Header set X-Content-Type-Options nosniff, nosniff

PHP:
header('X-Content-Type-Options: nosniff, nosniff');

Nginx:
add_header X-Content-Type-Options nosniff, nosniff;

حتاالمکان شماره پورت پیشفرض سرویس SSH, Database, FTP... رو تغییر بدید.

بخش مدیریتی وب اپلیکیشن رو با محدودیت های مبتنی بر IP امن‌تر کنید.

هرگز در محیط Production، اپلیکیشن رو توسعه ندید!
محیط Production = سرور واقعی

تنها زمانی از اکانت root یا admin استفاده کنید که بهش واقاً نیاز دارید.

ترافیک های عادی سایت رو Log و اونرو بطور منظم بررسی و تحلیل کنید.

اخبار و تازه های حوزه نرم افزار و امنیت سایبری رو دنبال کنید تا بروز باشید!

بطور منظم و ماهیانه پهنای باند وبسایت/سرور رو چک کنید.

برای کاهش مصرف پهنای باند و افزایش سرعت سایت، همیشه فایلهای CSS, JavaScript, HTML رو minify و lint کنید:
CSS:
JS:

حتاالمکان از کتابخانه های template engine برای کدنویسی لایه View/UI وب اپلیکیشن استفاده کنید و نه کدنویسی inline/mixed.

یک سیستم اسکنر پیاده کنید که نوع دسترسی و زمان تغییر فایلها و دایرکتوری های کل سایت رو اسکن و به شما گزارش کنه.

از استفاده بیش از حد کوکی و ذخیره اطلاعات حساس/نمایشی درونشون جداً خودداری کنید!

فایل‌ها و دایرکتوری های حساس(مثل session temp) رو در دسترس عموم قرار ندید!

جهت جلوگیری از برخی حملات XSS, clickjacking, code injection، مقدار هدر Content-Security-Policy رو default-src 'self' قرار بدید:

کد:
Apache httpd.conf:
Header set Content-Security-Policy: default-src 'self';

Nginx:
add_header Content-Security-Policy "default-src 'self';"

PHP:
header("Content-Security-Policy: default-src 'self'", FALSE);

داده های حساس رو توسط متد POST ارسال کنید و نه متد GET.
که داده ها در URL نمایان نشن.

از تیم ها یا شرکت های فعال در حوزه امنیت سایبری و Pen Testing درخواست کنید که اپلیکیشن شمارو تست امنیتی black-box کنند.

درصورتیکه از متد OPTIONS استفاده نمی کنید، بهتره این متد رو توسط وبسرور مسدود کنید.

از سیستم ضد ربات(CAPTCHA) در صفحات وب اپلیکیشن استفاده کنید.

هر زمان که در حال ساخت یک فایل یا دایرکتوری هستید، permission اش رو هم تعیین کنید.

مطمعن بشید که Firewall سرور فعال و بدرستی تنظیم شده باشه.

همیشه charset پیشفرض فایلهای وب اپلیکیشن رو UTF-8 قرار بدید. (without BOM)

حجم فیلد request body وبسرور رو برای دریافت داده های کاربر به 1024 کیلوبایت محدود کنید.

فایلهایی مثل phpinfo.php i.php رو در دسترس عموم قرار ندید!

جهت جلوگیری از برخی حملات XSS به کاربر، مقدار هدر X-XSS-Protection رو 1 قرار بدید:

کد:
Apache .htaccess
Header set X-XSS-Protection "1; mode=block"

Nginx:
add_header "X-XSS-Protection" "1; mode=block";

PHP:
header('X-XSS-Protection: 1; mode=block');

همیشه از یک کلمه prefix برای نام دیتابیس و جداول استفاده کنید تا قربانی حملات Brute Force نشید.
مثل ...xyz_tableAccounts, efg_dbBlog, abc_tableItems

از نمایش دادن خطاهای برنامه نویسی و سطح پایین در محیط Production خودداری کنید.
انها رو Log کنید تا بتونید رفعشون کنید.

آدرس های ایمیل رو بصورت ساده/plain نمایش ندید تا قربانی spam نشید.

همیشه محتوای User Agent رو قبل از استفاده برش و فیلترسازی کنید!

از بکاربردن تصاویر حجیم در Background اپلیکیشن خودداری کنید.

برای کاهش مصرف پهنای باند و افزایش سرعت سایت، از بکاربردن بیش از حد کدهای CSS و جاوااسکریپت خودداری کنید.

جهت افزایش ایمنی کاربران/سایت، سیستم SSL/HTTPS رو روی وبسرور فعال کنید.
نکته: مطمعن بشید که تمام لینک های صفحات با https:// شروع بشن و کدهای جاوااسکریپت شما درخواستها رو بصورت HTTPS ارسال میکنه.

تصاویر رو از سایتهای متفرقه External لود نکنید!

ایمیل‌های ارسالی که محرمانه هستند و حساسیت بالایی دارند رو قفل و رمزگذاری کنید.

از سیستم های cache برای کش کردن داده های استاتیک(تصویر، فایل JS، فایل CSS) استفاده کنید.

صفتهای فرم رو بصورت کامل بنویسید و بحالت پیشفرض رها نکنید.
کد:
<form name="frmContact" method="post" action="contact.php" enctype="application/x-www-form-urlencoded" accept-charset="utf-8">


صفحات سایت رو در همه مرورگرها تست و بررسی کنید تا کاملاً سازگار باشن. IE Firefox Chrome Opera...

همیشه صفت maxlength رو به فیلدهای text اضافه کنید.

از قرار دادن تصاویر و فایلهای Download/Upload در دایرکتوری اصلی/root اپلیکیشن خودداری کنید.

نام دایرکتوری/URL بخش مدیریت وب اپلیکیشن رو به یک نام غیرمعمول تغییر بدید!
هر چیزی بجز admin, administration, login, management...

حتاالمکان جهت نقل و انتقال فایلها از پروتکل SFTP بجای پروتکل FTP استفاده کنید.

جهت ایمن سازی لینک هایی که در پنجره جدید بصورت blank باز میشن، خاصیت rel=noopener رو به تگ <a> اضافه کنید.
جهت جلوگیری از دستکاری پنجره توسط سایت هدف.
کد:
<a href="http://domain/page" rel="noopener" target="_blank">Test</a>

اپلیکیشن رو طوری پیاده سازی کنید که کاربران idle رو خودکار از سیستم Logout کنه.

حتاالمکان سیستم two-factor authentication رو در اپلیکیشن خود پیاده سازی کنید. (یا همون 2FA)

از اجرا کردن برنامه های Console/Shell از طریق جاوااسکریپت(Client-side) خودداری کنید.

بصورت هفتگی یا ماهیانه کل سایت یا فایلهای وب اپلیکیشن رو توسط Anti-Malware ها اسکن کنید. (آنلاین یا آفلاین)

در وب اپلیکیشن، قابلیت ها و امکاناتی که استفاده نمی کنید رو غیرفعال کنید.

افرادی را برای تست اپلیکیشن دخالت بدید که در فرایند برنامه نویسی اپلیکیشن نبودند.

انتقادات، پیشنهادات و نظرات(Feedback) کاربران را مشتاقانه پذیرا باشید.

همیشه برای گرفتن remote console از پروتکل SSH بجای پروتکل Telnet استفاده کنید.

درخواست های HTTP آجاکسی رو به حداقل برسونید.

برای جلوگیری از برخی حملات Man-in-the-middle مقدار هدر Strict-Transport-Security رو max-age=31536000 قرار بدید:

کد:
HTML:
<meta http-equiv="Strict-Transport-Security" content="max-age=31536000"/>

Apache HTTPD:
Header set Strict-Transport-Security "max-age=31536000"

PHP:
header('Strict-Transport-Security: max-age=31536000');

نکته: اگر وبسایت شامل subdomain هم هست، عبارت ; includeSubDomains رو در کنار مقدار بالا قرار بدید.
کد:
Strict-Transport-Security: max-age=31536000; includeSubDomains


خطاهای جاوااسکریپت صفحات سایت رو با debug کردن صفحه مورد نظر رفع کنید.

بصورت هفتگی یا ماهیانه سرعت سایت رو آنالیز و ایرادات رو رفع کنید:

حتاالمکان برای ارسال/دریافت ایمیل از پروتکل SMTPS و POP3S بجای پروتکل POP3 و SMTP استفاده کنید.

برای محیط Production، متون توضیحات(Comment) رو از داخل فایلهای HTML, JavaScript, CSS حذف کنید.

حتاالمکان کدهای CSS رو بصورت External و از داخل هاست خودتون include کنید.
کد:
<link type="text/css" href="print.css" rel="stylesheet" media="all" title="Print"/>

حتاالمکان کدهای JavaScript رو بصورت External و از داخل هاست خودتون include کنید.
کد:
<script type="text/javascript" src="jquery.js"></script>

مرورگرها برای تعیین نحوه پردازش URL از نوع MIME صفحه استفاده می کنن و نه پسوند فایل! بنابراین بسیار مهمه که اسکریپت ها و سرورهای وب، نوع MIME صحیح رو در هدر Content-Type درج کنن.

کد:
header('Content-Type: application/json');

header('Content-Type: text/plain');

header('Content-Type: application/pdf');

توجه: اگر این مورد درست پیکربندی نشه، مرورگرها به اشتباه به تفسیر محتوای فایلها می پردازن و خروجی سایتها هم به درستی کار نمی کنن، و حتی ممکنه فایلهای load شده مورد سوء استفاده های امنیتی قرار بگیرن.
وبلاگ: Yousha.Blog.ir


کد کمتر => خطای کمتر => قابل فهمتر => خوانایی بیشتر => نگهداری بهتر
  پاسخ
تشکر شده توسط : Reza باز باران با ترانه


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان