نکات امنیتی برای محافظت از وب سایت

توصیه های حرفه ای برای بهینه سازی امنیت وب سایت شما و اجتناب از هک کردن :شما ممکن است فکر کنید که سایت شما چیزی ارزشمند برای هک شدن ندارد، اما وب سایت ها همیشه در معرض خطر قرار دارند و باید امنیت وب سایت آن ها تامین شود. هکرها به طور مرتب توسط اسکریپت های خودکار نوشته می شوند و در تلاش برای سوء استفاده از مسائل امنیتی وب سایت شناخته شده در نرم افزار انجام می شود.نرم افزار را به روز نگه داریداین ممکن است به نظرمسئله آشکاری باشد، اما اطمینان حاصل کنید که تمام نرم افزار را به روز نگه دارید، در حفظ امنیت سایت شما حیاتی است. این در مورد هر دو سیستم عامل سرور و هر نرم افزاری که ممکن است در وب سایت شما مانند CMS یا انجمن استفاده شود صدق می کند. هنگامی که سوراخ های امنیتی وب در نرم افزار یافت می شوند، هکرها سریعا تلاش می کنند تا از آنها سوء استفاده کنند.اگر از یک راه حل مدیریت شده استفاده می کنید، نیازی به نگرانی در مورد استفاده از به روز رسانی های امنیتی برای سیستم عامل نیست زیرا شرکت میزبان باید از این امر مراقبت کند.اگر از نرم افزار شخص ثالث در وب سایت خود مانند CMS استفاده می کنید، باید اطمینان حاصل کنید که میزبان شما سریعا برای اعمال هر گونه باگ امنیتی دست بکار می شود.بسیاری از توسعه دهندگان از ابزارهایی مانند Composer، npm یا RubyGems برای مدیریت وابستگی های نرم افزاری خود استفاده می کنند و آسیب پذیری های امنیتی که در بسته ای که به آن وابسته است را ایجاد می کنند. اطمینان حاصل کنید که شما وابستگی خود را به روز نگه دارید و از ابزارهایی مانند Gemnasium برای دریافت اطلاعیه های خودکار زمانی استفاده می کنید.مراقب تزریق SQL باشید(SQL Injection)حملات SQL Injection زمانی است که مهاجم از یک فیلد فرم وب یا پارامتر URL برای دسترسی به پایگاه داده شما استفاده می کند. هنگامی که شما از استاندارد Transact SQL استفاده می کنید، به راحتی می توانید کد ناقص را در query وارد کنید که می تواند برای تغییر جداول، اطلاعات و حذف داده ها مورد استفاده قرار گیرد. شما می توانید به راحتی این کار را همیشه با استفاده از پرس و جو های پارامتریک انجام دهید، اکثر زبان های وب این ویژگی را دارند و پیاده سازی آسان است.این کوئری را در نظر بگیرید:"SELECT * FROM table WHERE column = '" + parameter + "';"اگر یک مهاجم پارامتر URL را برای عبور در ‘orا’ ۱ ‘=’ ۱ تغییر داد، این باعث می شود که پرس و جو به شکل زیر باشد:"SELECT * FROM table WHERE column = '' OR '1'='1';"از آنجا که ‘۱’ برابر با ‘۱’ است، این اجازه می دهد تا مهاجم یک query اضافی را به انتهای دستور SQL اضافه کند که اجرا شود.شما می توانید این query را با امن کنید. به عنوان مثال، اگر از MySQLi در PHP استفاده می کنید این باید تبدیل شود به :$stmt = $pdo->prepare('SELECT * FROM table WHERE column = :value'); $stmt->execute(array('value' => $parameter));از حملات XSS محافظت کنیداسکریپت (Cross-site scripting (XSS حملات جاوا اسکریپت را به صفحات شما تزریق می کند و سپس در مرورگرهای کاربران شما اجرا می شود و می تواند محتوای صفحه را تغییر دهد یا اطلاعات را مهاجم به عقب بر گرداند. به عنوان مثال، اگر شما نظر خود را در یک صفحه بدون تایید نشان می دهید، مهاجم ممکن است نظراتی حاوی برچسب های اسکریپت و جاوا اسکریپت را ارائه کند، که می تواند در هر مرورگر دیگر کاربر اجرا شود و کوکی ورود به سیستم را سرقت می کند. شما باید مطمئن شوید که کاربران نمی توانند مطالب جاوااسکریپت فعال خود را در صفحات شما تزریق کنند.این یک نگرانی خاص در برنامه های کاربردی وب مدرن است که در آن صفحات در حال حاضر عمدتا از محتوای کاربر ساخته شده اند و در بسیاری از موارد HTML را تولید می کنند که سپس توسط چارچوب هایی مانند Angular و Ember نیز تفسیر می شود. این چارچوب ها بسیاری از محافظت های XSS را فراهم می کنند، نه تنها تزریق جاوا اسکریپت به HTML موثر است.کلید در اینجا این است که تمرکز کنیم که چگونه محتوای کاربر ایجاد شده شما می تواند از حد انتظارات شما فرار کند و توسط مرورگر تفسیر شود به عنوان چیزی دیگری که شما در نظر داشتید. این مشابه دفاع از SQL Injection است. هنگامی که به صورت پویا HTML تولید می کنید، از توابع استفاده کنید که صریحا تغییرات مورد نظر شما را انجام می دهند (به عنوان مثال استفاده از elements.setAttribute و element.textContent که به طور خودکار توسط مرورگر escape می شود(به جای تنظیم عنصر با دست)، یا از توابع استفاده شود(به جای پیوند دادن رشته یا تنظیم محتوای خام HTML).یکی دیگر از ابزارهای قدرتمند در جعبه ابزار مدافع XSS، سیاست امنیتی محتوا (CSP) است. CSP یک سرصفحه است که سرور شما می تواند به مرورگر بازگردد تا محدودیت نحوه و کد جاوا اسکریپت را در صفحه اجرا کند، مثلا برای غیرفعال کردن هر اسکریپتی که در دامنه شما میزبانی نمی شود، جاوا اسکریپت را غیر فعال کرده یا ()eval را غیرفعال کند.مراقب پیام های خطا باشیدمراقب اطلاعاتی که در پیام های خطایی که به کاربر داده می شود باشید. فقط خطاهای ورود اطلاعات اشتباه کاربر را برای آن ها ارائه کنید تا اطمینان حاصل کنید که اسرار موجود در سرور شما نشت نکند (به عنوان مثال کلید API یا کلمه عبور پایگاه داده). جزئیات کامل خطاها را ارائه ندهید، زیرا این می تواند حملات پیچیده مانند QL Injection را بسیار ساده تر کند. فقط به کاربران اطلاعاتی را که نیاز دارند نشان دهید.بر روی هر دو طرف اعتبار سنجی کنیداعتبار سنجی همیشه باید هم در مرورگر و هم طرف سرور انجام شود. مرورگر می تواند خرابی های ساده مانند فیلدهای اجباری خالی نباشد و یا هنگامی که شما متن را در فیلدهای اعداد وارد می کنید کنترل کند. باید اطمینان حاصل کنید که این اعتبارسنجی و اعتبارسنجی عمیقتر در سمت سرور انجام شود عدم این کارمی تواند به کد مخرب یا کد اسکریپت در پایگاه داده وارد شود یا موجب ایجاد نتایج نامطلوب در وب سایت شما شود.گذرواژه هایتان را بررسی کنیدهمه می دانند که باید از کلمه عبور پیچیده استفاده کنند، اما این بدان معنی نیست که همیشه انجام می شود. مهم است که از کلمه عبور قوی برای سرور و ناحیه وبسایت خود استفاده کنید، اما برای حفظ امنیت حسابهای خود، اصلاحات لازم را برای استفاده از رمز عبور خوب انجام دهید.همانطور که کاربران ممکن است آن را دوست نداشته باشند، اجرای الزامات رمز عبور مانند حداقل هشت کاراکتر، از جمله نامه بزرگ و شماره، به حفظ اطلاعات خود در طولانی مدت کمک می کند.رمزهای عبور همیشه باید به عنوان مقادیر رمزگذاری ذخیره شوند، ترجیحا با استفاده از یک الگوریتم هش کردن یک طرفه مانند SHA، استفاده از این روش به این معنی است که شما در حال اعتبار سنجی از کاربران هستید که همیشه مقادیر رمزگذاری شده را مقایسه می کنید.در صورت هک کردن و سرقت گذرواژه های شما، استفاده از گذرواژه های hash شده می تواند به محدودیت خسارت کمک کند، زیرا امکان رمزگشایی آنها وجود ندارد.از آپلود فایل اجتناب کنیداجازه دادن به کاربران برای آپلود فایل ها به وب سایت شما می تواند یک خطر امنیتی وب سایت بزرگ باشد. خطر این است که هر فایل آپلود شده، هر چند بی خطر می تواند یک اسکریپت داشته باشد که هنگام اجرای آن بر روی سرور شما، وب سایت شما را به طور کامل باز می کند و باعث بهم ریختگی آن می شود.اگر شما امکان آپلود فایل داشته باشید، باید تمام فایل ها را با سوء ظن زیاد درمان کنید. اگر شما به کاربران اجازه آپلود تصاویر را می دهید، نمی توانید بر روی فرمت فایل یا نوع MIME تکیه کنید تا تأیید شود که فایل یک تصویر است زیرا این ها به راحتی می توانند جعلی باشند. اکثر فرمت های تصاویر اجازه ذخیره یک بخش نظر را می دهند که می تواند شامل کد PHP است که می تواند توسط سرور اجرا شود.پس چه کاری می توانید انجام دهید تا از این کار جلوگیری شود؟ در نهایت می خواهید کاربران را از امکان اجرای هر فایل ای که آپلود می کنید متوقف کنید. به طور پیش فرض، سرورهای وب سعی نمی کنند فایل ها را با پسوند های تصویری اجرا کنند، اما صرفا بر روی چک کردن پسوند فایل به عنوان یک فایل با نام image.jpg.php شناخته شده نیست.برخی از گزینه ها عبارتند از تغییر نام فایل در آپلود برای اطمینان از فرمت فایل صحیح، و یا برای تغییر مجوز فایل، به عنوان مثال، chmod 0666، بنابراین نمی تواند اجرا شود. شما می توانید یک فایل .htaccess ایجاد کنید که تنها اجازه دسترسی به تنظیمات فایل را میدهد.deny from all <Files ~ "^\w+\.(gif|jpe?g|png)$"> order deny,allow allow from all </Files>در نهایت، راه حل توصیه شده جلوگیری از دسترسی مستقیم به فایل های آپلود شده به طور کامل است. به این ترتیب، هر فایل ارسال شده به وب سایت شما در یک پوشه خارج از web root یا در پایگاه داده به عنوان یک حباب ذخیره می شود. اگر پرونده های شما به طور مستقیم در دسترس نباشد، شما باید یک اسکریپت برای استخراج فایل ها از پوشه خصوصی (یا یک متد HTTP در NET.) ایجاد کنید و آنها را به مرورگر ارسال کنید. برچسب های تصویر از ویژگی src پشتیبانی می کند که یک URL مستقیم برای یک تصویر نیست، بنابراین ویژگی src شما می تواند به اسکریپت تحویل فایل شما اشاره کند که نوع محتوای صحیح آن را در هدر HTTP تنظیم می کند. مثلا:<img src="/imageDelivery.php?id=1234" /> <?php // imageDelivery.php // Fetch image filename from database based on $_GET["id"] ... // Deliver image to browser Header('Content-Type: image/gif'); readfile('images/'.$fileName); ?>بیشتر ارائه دهندگان میزبانی با پیکربندی سرور برای شما مقابله می کنند، اما اگر شما وب سایت خود را در سرور خود میزبانی می کنید، چند چیز وجود دارد که باید بررسی کنید.اطمینان حاصل کنید که یک فایروال نصب دارید و همه پورت های غیر ضروری را مسدود می کنید. در صورت امکان، (DMZ (Zone Demilitarized Zone تنها اجازه دسترسی به پورت ۸۰ و ۴۴۳ از دنیای خارج را فراهم می کند. اگر چه شما نمی توانید از طریق یک شبکه داخلی به سرور دسترسی داشته باشید، این ممکن است ممکن نباشد زیرا شما باید پورت ها را باز کنید تا اجازه آپلود فایل ها را داشته باشید و از راه دور به سرور خود بر روی SSH یا RDP وارد شوید.اگر اجازه می دهید فایل ها از طریق اینترنت آپلود شوند، از روش های حمل و نقل امن به سرور خود مانند SFTP یا SSH استفاده کنید.در نهایت، محدود کردن دسترسی فیزیکی به سرور خود را فراموش نکنید.از HTTPS استفاده کنیدHTTPS یک پروتکل است که برای ارائه امنیت در اینترنت استفاده می شود. HTTPS تضمین می کند که کاربرانی که در حال صحبت کردن با سرورهایی هستند هیچ کس دیگری نمی تواند محتوایی را که در حال ردوبدل کردن هستند را ببیند یا تغییر دهد.اگر هر چیزی را که کاربران شما ممکن است بخواهند خصوصی داشته باشند، بسیار توصیه می شود از HTTPS تنها برای ارائه آن استفاده کنید. یک فرم ورود اغلب یک کوکی را برای مثال ارسال می کند که با هر درخواست دیگر به سایت شما ارسال می شود که یک کاربر وارد شده شده است و برای تایید این درخواست ها استفاده می شود. مهاجم این سرقت را قادر می سازد به طور کامل یک کاربر تقلید و جلسه ورود به سیستم خود را بگیرد. برای شکست دادن این نوع حملات، تقریبا همیشه باید از HTTPS برای کل سایت خود استفاده کنید.به طور قابل توجهی گوگل اعلام کرده است که اگر از HTTPS استفاده می کنید، آنها را در رتبه بندی جستجو افزایش دهید، و این به نفع SEO نیز خواهد بود.دریافت ابزارهای امنیتی وب سایتهنگامی که شما فکر می کنید تمام کارها را انجام می دهید، زمان آن است که بتوانید امنیت وب سایت خود را آزمایش کنید. موثرترین راه برای انجام این کار از طریق استفاده از برخی از ابزارهای امنیتی وب سایت است که اغلب به عنوان تست نفوذ خوانده می شود.بسیاری از محصولات تجاری و رایگان برای کمک به شما در این زمینه وجود دارد. آنها با استفاده از اسکریپت هکرها به همان شیوه عمل می کنند که در آن همه افراد سوء استفاده می کنند و تلاش می کنند سایت خود را با استفاده از برخی از روش های ذکر شده قبلی مانند SQL Injection تطبیق دهند.تامین امنیت وب سایت با دیزاینستان