۱۲ نکته امنیتی در امنیت سایت

  • خانه
  • ۱۲ نکته امنیتی در امنیت سایت
Image تحقیقات

۱۲ نکته امنیتی در امنیت سایت

با سلام خدمت شما

در این مقاله به بررسی ۱۲ نکته کاربری به جهت امنیت وب سایتها اشاره می شود که با رعایت آنها مطمئنن سایت شما از هر نظر امن و غیر قابل نفوذ خواهد بود.

 

۱- عدم نمایش خطا در سایت

یکی از جذابترین و یا شاید ساده ترین راه های نفوذ به وب سایت استفاده از جستجوگر محبوب گوگل می باشد!
معمولا هکرها در سایتها به دنبال خطا می باشند خطایی که به صورت بصری قابل مشاهده بوده و می توان از آن در جهت نفوذ به سایت استفاده کرد.
گوگل این امکان را بطور کامل برای افرادی که تازه با چند متد هک آشنا شده اند فراهم کرده است.
به طور مثال سایتی دارای خطایی از نوع warning می باشد.
هکر با جستجوی عبارت intext:warning:mysql_result با لیستی از صفحات خطای سایتهایی که گوگل آنها را در دیتابیس خود ذخیره کرده روبرو می شود و با کمی تغییر در نوع جستجو به اهداف دقیق تر و یا سایتهای حساس تری روبرو می شود.
و باز به طور مثل با جستجوی عبارت site:.org intext:warning:mysql_result لیستی از سایتهای دولتی نمایش داده می شود.
در حالت خطای warning حتی نام کاربری ورود به پنل اصلی سایت نمایش داده می شود که هکر با استفاده از brute force
و کمی تلاش می تواند پسورد سایت را پیدا کند.
به همین دلایل است که باید تمامی خطا ها در هنگام بالا بودن سایت غیر قابل نمایش باشد.در حالت کلی بهتر است در یکی از فایلهای اصلی سایت خود که در بقیه قسمتها فراخوانی می شود که معمولا این فایل میتواند config.php باشد از تابع mysql_error(0) استفاده کنید تا حتی اگر خطایی هم در اجرای روند کدها رخ داده این خطا برای کاربران نمایش داده نشود.

 

۲ – استفاده از password protect

یکی از بهترین راه ها برای جلوگیری از ورود هکر به فولدهای خاص استفاده از قابلیت password protect در پنل مدیریت cpanel می باشد.مثلا اگر فایلهای مدیریتی سایت شما در داخل پوشه ای به نام Admin قرار دارد و با وارد کردن نام کاربری و پسورد وارد این پوشه می شوید و به پنل مدیریت سایت دسترسی دارید با استفاده از این قابلیت می توانید بر روی این پوشه پسوردی قرار دهید.
از این پس قبل از ورود شما به صفحه Admin پنجره ای ظاهر شده که از شما نام کاربری و پسوردی را میخواهد که در قسمت password protect تنظیم کرده اید.
در این حالت حتی اگر هکر از طریق متد sql injection به پسورد مدیریت سایت دسترسی پیدا کرده باشد نمیتواند به پنل مدیریت سایت نفوذ کند زیرا ابتدا باید از پسوردی که شما بر روی پوشه خود گذاشته اید عبور کند.
در نتیجه بهتر است همیشه فایلهای مربوط به صفحات مدیریت خود را در پوشه ای جدا از فایلهای اصلی سایت قرار دهید تا بتونید از این طریق از آنها محافظت نمایید.

 

۳ – استفاده از فایل robot.txt

فایل robots.txt یک فایل متنی ساده می باشد که بیشتر به جهت سئو (search engine optimaiz) در سایتها استفاده می شود. اما میتوان از این فایل جهت محافظت از فولدرهایی که نمیخواهید دیتا داخل آنها توسط موتورهای جستجو دیده شود استفاده نمایید.
فایل robots.txt را باید در ریشه سایت خود قرار دهید و مانند مثال از آن استفاده نمایید.
ابتدا یک فایل با نام robots.txt ایجاد کنید و سپس درون آن عبارتهای زیر را قرار دهید:
User-agent:*
Disallow: /upload/
با استفاده از این دستور رباتهای جستجوگر محتویات داخل پوشته upload را ایندکس نمیکنند.
اینکار از این جهت مهم است که شاید شما در سایت پوشه ای داشته باشد که محتوای فایلهای آپلود شده در آن مخصوص اعضای سایت باشد یا نخواهید اطلاعات داخل این پوشه در نتایج جستجوهای اینترنتی دیده شود یکی از ابتدایی ترین کارهایی که لازم است انجام دهید ایجاد همین فایل robots.txt می باشد که تاثیر بسزایی در این امر دارد و همچنین به سئو سایت شما نیز کمک شایانی میکند.
اگر میخواهید یک فایل خاص را از دید رباتها پنهان نمایید باید آدرس دقیق فایل را در داخل robots.txt وارد نمایید.

User-agent:*
Disallow: /upload/mypic.jpg

توجه نمایید که محتویاتی که داخل این فایل قرار میگیرد از دید رباتها حساس به حروف بزرگ و کوچک می باشد در نتیجه پوشه Upload با پوشه upload کاملا متفاوت می باشد. و همچنین شما میتوانید از الگوهای خاص مانند عبارت های با قاعده استفاده نمایید که البته در اینجا تنها میتوان از علامتهای (* ? $) استفاده کرد.

 

۴ – اعتبار سنجی کامل فرم ها

هیچ سایت داینامیکی بدون فرم معنای داینامیک را نمی دهد. زمانی که در صفحات سایت خود از فرم های مختلف مانند ثبت نام , تماس با ما و… استفاده می نمایید فراموش نکنید که اطلاعات فرم ها را هم در سمت کلاینت و هم در سمت سرور قبل از ارسال آنها به دیتابیس بررسی نمایید.
برای اعتبار سنجی سمت کلاینت میتوانید از javascript یا jquery استفاده نمایید که یکی از بهترین پلاگینهای موجود برای اعتبارسنجی فرم jqueryvalidation می باشد که قابلیت های بسیار زیادی در اعتبار سنجی انواع فرم ها دارد.
در سمت سرور قبل از اینکه دیتا ارسالی توسط کاربر به دیتابیس برسد باید اعتبار سنجی کاملی انجام دهید زیرا ممکن است کاربری مزاحم کاراکترها یا عبارتهای خاصی را به جهت نفوذ به سایت در فرم وارد کرده باشد در صورتی که اعتبار سنجی شما کامل انجام نشده باشد ممکن است باعث هک شدن سایت و از بین رفتن اطلاعات شما شود.
یکی از ساده ترین کاراکترهایی که برای نفوذ به سایت از طریق متد sql injection انجام می شود ارسال ‘ از طریق فرم ها به دیتابیس می باشد که براحتی میتوانید توسط توابعی مانند addslashes یا mysql_real_escape_string جلوی آنرا بگیرید این توابع قبل از ‘ یک \ به جهت غیر فعال کردن آن قرار می دهند.
همچنین برای جلوگیری از حملات xss بهتر است از توابعی مانند striptags یا htmlentities استفاده نمایید.
نحوه استفاده از این توابع در سایت رسمی php به طور کامل شرح داده شده است.

 

۵- Hash کردن رمزهای ورود یا داده های حساس

در زبان آموزش php توابع زیادی برای hash کردن داده ها وجود دارد که براحتی میتوانید از آنها برای کد کردن اطلاعات حساس خود استفاده کنید.
یکی از توابع کاربردی و ساده base64_encode() می باشد که معمولا از این تابع برای کد کردن عبارتهای طولانی مانند کپی رایت استفاده می شود که برای کاربر عادی تشخصیص و رمز گشایی آن کمی مشکل می باشد. برای استفاده کافی است تابع را نوشته و دیتایی که میخواهید encode شود داخل پرانتر بنویسید.
از دیگر تابع های کاربردی میتوان به md5 اشاره کرد. md5 یک تابع برگشت ناپذیر می باشد یعنی رمزگشایی از آن مانند base64 آسان نیست بلکه برای رمزگشایی دیتاهای مختلف با عبارت md5 شده مقایسه می شود و در صورتی که این مقایسه صحیح باشد جواب برگردانده می شود. از این تابع بیشتر به جهت رمز دار کردن پسوردها استفاده می شود .
تابع به صورتی عمل میکند که هر تعداد کاراکتری که به آن بدهید آنرا تبدیل به یک عبارت ۳۲ تایی مینماید. به طور مثال ۱۲۳۴۵۶ در حالت md5 به صورت e10adc3949ba59abbe56e057f20f883e دیده خواهد شد.
تابع دیگری مانند md5 وجود دارد که sha1 نام دارد در این حالت عبارت ورودی به یک رشته ۴۰ تایی تبدیل می شود.
شما میتوانید با استفاده از این توابع و عملیات salt پسوردهای پیچیده ای تولید نمایید که رمزگشایی آنها کاری زمانبر و بسیار سخت باشد.در واقع Salt یک روش است که از طریق آن رشته ای را میتوان به کد hash شده اضافه کرد تا کرک کردن آن سخت تر شود.
به طور مثال تابع زیر تابع hashing انجمن ساز Vbulletin می باشد

function hash_password($password, $salt)
{
// if the password is not already an md5, md5 it now
if ($password == ”)
{
}
else if (!$this->verify_md5($password))
{
$password = md5($password);
}
// hash the md5′d password with the salt
return md5($password . $salt);
}

که خلاصه آن به صورت زیر خواهد بود

بهتر است همیشه تعداد کاراکترهای salt را بیشتر از ۵ کاراکتر بگیرید تا کرک آن سخت تر شود.

 

۶- کنترل کامل فایلهای در حال آپلود

اگر در سایت خود فرمی دارید که از طریق آن فایلی قرار است روی سایت آپلود شود باید دقت ویژه ای در بررسی فایلهای آپلود شده داشته باشید.
قبل از هرچیز باید پسوند فایلهای مجاز را مشخص نمایید یعنی اگر کاربر قرار است عکسی آپلود نماید حتما پسوند های مجاز را مشخص نمایید. هم در سمت کلاینت و هم در سمت سرور مانند آنچه در قبل گفته شده اعتبارسنجی فایل را انجام دهید.
برخی مواقع پیش میاید که مهاجم با تغییر در پسوند فایل سعی در دور زدن کدها اعتبارسنجی بر میاید به طور مثال مهاجم فایلی به نام shell.php دارد و آنرا به صورت shell.php.jpg تغییر نام می دهد در این حالت در صورتی که کد اعتبار سنجی شما کامل و کاربردی نباشد فایل به طور موفقیت آمیز بر روی سایت شما آپلود می شود.
همیشه سعی کنید فایل آپلود شده را با تغییر نام و پسوندی جدید بر روی سرور قرار دهید که دسترسی مستقیم به آن غیر ممکن باشد.
همچنین در سرورهای لینوکس با تغییر سطح دسترسی فولدر آپلود به ۶۶۶ میتوانید از اجرای مستقیم فایلها جلوگیری کنید.
و یا با تغییراتی در فایل htaccess میتوانید از اجرا شدن فایلها با ۲ پسوند جلوگیری کنید که در ادامه به آنها اشاره خواهیم کرد.
بهترین راه برای امنیت در این حالت جلوگیری از دسترسی مستقیم کاربران به فایلها می باشد که شما میتوانید پوشه آپلود خود را در یک سطح بالاتر از ریشه سایت قرار دهید و با استفاده از توابع یا اسکریپت های خاص به فایلها دسترسی داشته باشید تا نیازی به آدرس دهی مطلق به فایلها نباشد.
مثلا فایل تصویر خود را به صورت < img src=”/imageload.php?id=133″ / > در سایت قرار دهید و بعد با استفاده از متد get آنرا از دیتابیس فراخوانی نمایید.

 

۷- استفاده از htaccess

فایل htaccess در واقع برای پیکربندی و تنظیمات خاص در وب سرور apache می باشد که معمولا در ریشه سایت قرار میگیرد.با استفاده از این فایل میتوانید تنظیمات آپاچی را تغییر دهید به طور مثال redirect کردن صفحات یا مسدود سازی ip یک کاربر و…
در این مقاله تنها به چند مورد کاربردی برای امنیت وب سایت اشاره می شود برای استفاده بهتر از فایل htaccess با جستجو به نتایج بهتری خواهید رسید.
ابتدا باید RewriteEngine on را در ابتدای فایل خود قرار دهید و سپس کدهایی که میخواهید درون این فایل بنویسید.
توجه کنید که htaccess حساس به حروف بزرگ و کوچک می باشد.
برای مسدود سازی یک Ip میتوانید از نمونه کد زیر استفاده نمایید:

RewriteCond %{REMOTE_ADDR} ^(A.B.C.D)$
RewriteRule ^/* http://www.domain.com/sorry.html [L] که به جای ABCD اجزای ۴ گانه ip قرار میگیرید و به جای sorry.html صفحه ای که میخواهید کاربر به آن هدایت شود.
جلوگیری از hotlink
اگر فکر میکنید افراد سود جو از مطالب سایت شما مانند عکسها یا موزیکها و.. در سایت خود استفاده میکنند و این امر ممکن است باعث از دست رفتن پهنای باند سایت شما شود میتوانید از کد زیر استفاده نمایید.

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www.)?domain.com/ .*$ [NC] RewriteRule .(gif|jpg|swf|flv|png)$ /feed/ [R=302,L]

برای جلوگیری از sql injection و همچنین بهینه سازی url های سایت خود میتوانید از کد زیر استفاده نمایید

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.+)$ index.php?url=$1 [QSA,L]

 

۸- ایجاد لاگ فایل از تراکنش ها

بهتر است همیشه از تمامی فعالیت هایی که بر روی سایت انجام می شود یک فایل به صورت لاگ ذخیره نمایید تا در صورت بروز مشکل بتوانید از طریق آن هرچه سریعتر مشکل ایجاد شده را بر طرف نمایید.
معمولا بر روی CMSها کامپوننت یا ماژولی برای این منظور در نظر گرفته شده که باید فعال شوند اما در صورتی که میخواهید خودتان چنین فایلی بسازید بهتر است تمامی تراکنش های صورت گرفته در کل سایت را مد نظر قرار دهید و آنهارا در یک فایل متنی ساده ذخیره نمایید.
همچنین وب سرور آپاچی در صورتی که قسمتی از کد بر روی سایت خطایی دهد فایلی با نام error_log ایجاد میکند که با بازخوانی آن میتوانید مشکل بوجود آمده را حل نمایید.

 

۹- تغییر سطوح دسترسی فایلها و فولدرها

برای امنیت بهتر همیشه سعی کنید سطح دسترسی فایلها و فولدهای سایت خود را به درستی تنظیم نمایید.
سطح دسترسی از ۲ بخش کلی تشکیل میشود ۱ گروه کاربری ۲ مجوز استفاده.
در گروه کاربری ۳ سطح کاربری وجود دارد که اولی user یا owner می باشد که یعنی خود شما یا در واقع کسی که اطلاعات cpanel را دارد.گروه سوم group می باشد که در واقع گروه کاربرانی را شامل می شود که به سایت دسترسی دارند.گروه سوم world یا public می باشد که شامل تمامی افرادی می شود که به نت دسترسی دارند.
مجوز های استفاده نیز شامل ۳ گروه می شود اولی read که یعنی این گروه فقط اجازه خواندن اطلاعات را دارد .گروه بعدی write می باشد که یعنی اجازه تغییر در فایلها و پوشه ها را دارا می باشد.گروه آخر execute می باشد که اجازه اجرای فایلها را دارا می باشد.
ارزش رقمی read برابر با ۴ و ارزش رقمی write برابر با ۲ و execute برابر با ۱ می باشد.
هر گروه کاربری مجوز دسترسی خود را از مجموع سطح دسترسی های مشخص شده میگیرد به عنوان مثال اگر به گروه user هر ۳ سطح دسترسی را بدهیم مجموع آن برابر ۷ خواهد شد که یعنی هر ۳ کار را میتواند انجام دهد یا اگر فقط قابلیت read و write را بدهیم مجوع آن برابر با ۶ خواهد شد.
سطوح دسترسی از کنار هم قرار گرفتن این اعداد و انتساب آن به گروه های کاربری حاصل می شود.
به طور مثال اگر فایلی دارای سطح دسترسی ۶۴۴ باشد یعنی خود شما اجازه خواندن و نوشتن روی آن فایل را دارید و سایر گروه ها فقط اجازه خواندن فایل را دارا می باشند. در ادامه لیستی از سطوح دسترسی با توضیح قرار داده شده است:
برای فایلها:
۰۰۰ هیچ کس هیچ نوع دسترسی به این فایل ندارد و فقط خود شما می توانید حذفش کنید.
۶۰۰ به جز شما هیچ کس به این فایل دسترسی ندارد.
۶۴۴ شما اجازه کار با این فایل را دارید و دیگران فقط می توانند آن را اجرا کنند.
۶۶۶ یک حالت خاص که بعضی فایلها را از دسترس نرم افزارهای نصب شده روی سایت خارج می کند.
۷۶۶ همه افراد همه نوع دسترسی به این فایل دارند. این سطح دسترسی فقط برای حالتهای خاص است!
برای پوشه ها:
۰۰۰ هیچ کس هیچ نوع دسترسی به این پوشه ندارد.
۶۴۴ هیچ کس به جز شما اجازه دسترسی به این پوشه را ندارد و حتی فایل ها و پوشه های داخل این پوشه نیز قابل دسترسی نخواهند بود.
۷۱۱ شما کامل به این پوشه دسترسی دارید و بقیه فقط می توانند به فایل ها و پوشه های داخل این پوشه دسترسی داشته باشند. یعنی اگر فقط به آدرس این پوشه مراجعه شود خطای ۴۰۳ صادر می شود. یعنی دسترسی مستقیم به این پوشه امکان پذیر نیست.
۷۵۵ شما کامل به این پوشه دسترسی دارید و بقیه هم به طور کامل به این پوشه دسترسی دارند. حتی اگر فقط آدرس این پوشه را وارد نمایند و فایل index در این پوشه موجود نباشد، لیست فایل ها و پوشه هایی را که در این پوشه قرار دارند برایشان نمایش داده خواهد شد!
۷۷۷ همه افراد همه نوع دسترسی به این پوشه دارند. این سطح دسترسی فقط برای حالتهای خاص است!
بهترین سطح دسترسی برای فایل ها ۶۴۴ و برای پوشه های شما ۷۵۵ است.

 

۱۰- استفاده از بسته های بروز رسانی

اگر از نرم افزارهای (Third Party) مانند CMS ها یا FORUM ها برای مدیریت وب سایت خود استفاده میکنید حتما از نصب آخرین patch های امنیتی بر روی سایت خود اطمینان حاصل نمایید.اکثر این نرم افزارها به صورت خودکار یا از طریق rss در سایتهای خود اخبار مربوط به بروز رسانی ها را منتشر میکنند که میتوانید از آنها جهت اطلاع از آخرین بروز رسانی ها استفاده کنید.
همچنین اگر خودتان سایت را کدنویسی کرده اید سعی کنید از توابعی استفاده کنید که بروز رسانی های موجود بر روی سرور باعث اختلال در روند کار سایت نشود و همیشه سعی کنید محیط مجازی سیستم خود را به آخرین نسخه پایدار از هر محصول بروز رسانی نمایید.

 

۱۱- کد نویسی اصولی و صحیح

کد نویسی صحیح و اصولی یک قاعده است که اگر در هنگام کد نویسی رعایت شود کدهای شما پایداری و امنیت لازم را خواهد داشت.
به طور مثال همیشه در قسمتهایی که لازم است comment نویسی را انجام دهید تا زمانی که خودتان یا دیگران به کدتان مراجعه میکنند براحتی بتوانند آنرا درک کنند.
همیشه از سایت مرجع کمک بگیرید و توابعی که ممکن است به زودی deprecate شود را در کدها خود استفاده نکنید.
از توابع یا کلاس های نا امن استفاده نکنید و به صورت اصولی و صحیح توابعی که باعث ایمن شدن سایت می شود را استفاده کنید.
همیشه مقادیری که قرار است به دیتابیس وارد شود یا از دیتابیس خوانده شود چک کنید.
هیچ موقع به طور مستقیم اطلاعات فرم را در کوئری وارد نکنید.
سعی کنید به جای نوشتن query ها به صورت مستقیم از روش هایی مانند PDO استفاده نمایید.
مواردی از این دست به امنیت بیش از پیش سایت شما کمک خواهد کرد.

 

۱۲- استفاده از یک سرور خوب و مطمئن

اگر تمامی موارد بالا را رعایت کرده باشید اما سرور شما از امنیت و پایداری لازم برخوردار نباشد هرچقدر هم کد شما قوی نوشته شده باشد چون سرور شما نا امن است هر آن امکان هک شدن سایت شما و از بین رفتن اطلاعات شما وجود دارد.
پس همیشه سعی کنید فضایی که برای سایت خود تهیه میکنید از یک سرور مطمئن و قابل اعتماد باشد سروری که چندین سایل فعالیت میکند و شناخته شده است و یا سایتهای بزرگی را پشتیبانی میکند.
همچنین اگر از فضاهای اشتراکی استفاده میکنید با استفاده از لینک زیر میتوانید ببینید روی هر سرور چند سایت و چه سایتهایی وجود دارد و ببینید آیا فروشنده با شما صادق بوده یا خیر
Reverse IP Lookup – Find Other Web Sites Hosted on a Web Server
اگر هم از سرور شخصی یا مجازی استفاده میکنید حتما توسط شخصی مطمئن و متخصص آنرا پیکربندی نمایید تا امنیت سایت شما به طور کامل حفظ شود.

برگرفته از سایت مجله php