حسین احمدی
بنیانگذار توسینسو و برنامه نویس و توسعه دهنده ارشد وب

آموزش امن کردن وبسایت در 9 مرحله به زبان ساده

چگونه وبسایتمان را امن کنیم؟ اگر شما وب سایتی دارید یا به عنوان توسعه دهنده وب سایت فعالیت می کنید حتماً باید در نظر داشته باشید که وب سایت شما یا وب سایتی که قرار است به مشتری تحویل دهید امن باشد. هزاران شخص که با نام Hacker شناخته می شوند در کمین هستند تا به روشی سایت شما را هک کنند. شاید پیش خودتون بگید که سایت من چیزی نداره که بخواد هک بشه! اما هک کردن یک وب سایت یا سرور فقط برای Deface کردن وب سایت یا به سرقت بردن اطلاعات نیست. هکرها ممکن است از سرور سایت شما برای ارسال ایمیل های اسپم استفاده کنند یا از سرور شما برای دانلود فایل های مورد نظر خودشون استفاده کنند. در هر صورت ممکن است به هر دلیلی سرور یا سایت شما مورد حمله هکرها قرار بگیرد و مشکلاتی برای شما یا مشتریان شما ایجاد شود. در این مطلب قصد داریم با 9 روش برای امن سازی وب سایت و سرور وب سایت آشنا شویم.

دوره های شبکه، برنامه نویسی، مجازی سازی، امنیت، نفوذ و ... با برترین های ایران

آموزش امن کردن وبسایت در 9 مرحله به زبان ساده

1. به روز نگه داشتن نرم افزار ها

بر روی سرور شما همیشه نرم افزارهای جانبی نصب است که از آن ها استفاده می کنید، مانند بانک های اطلاعاتی، مرورگرها، آنتی ویرویس ها و ...، اما همین نرم افزارها نیز توسط یک انسان نوشته شده اند و ممکن است حفره های امنیتی در آن ها وجود داشته باشد که هکرها از این حفره ها برای آسیب رسانی به سرور های شما استفاده می کنند، همیشه سعی کنید آخرین نسخه های امنیتی و به روزرسانی سیستم عامل سرور و نرم افزار های موجود بر روی آن را نصب کنید. البته اگر از سرویس هاستینگ اشتراکی استفاده می کنید نیازی نیست که نگران این موارد باشید و معمولاً شرکت های هاستینگ به صورت دوره ای عملیات به روزرسانی نرم افزارهای سرور را انجام می دهند. یک مورد دیگر که باید به آن توجه کنید، معمولاً توسعه دهنده ها از ابزارهایی مانند nuget یا npm برای دریافت کامپوننت ها و ابزارها در پروژه های خود استفاده می کنند، همیشه سعی کنید Dependency های پروژه های خود را بوسیله ابزارهایی که بوسیله آن ها dependency ها را دریافت می کنید به روزرسانی کنید.

آموزش امن کردن وبسایت در 9 مرحله به زبان ساده

2. جلوگیری از SQL Injection

یکی از رایج ترین روش های حمله به وب سایت ها استفاده از SQL Injection است. بوسیله این مکانیزم فردی که قصد حمله به یک وب سایت را دارد، در فیلد های ورودی دستورات SQL را به روشی خاص نوشته و بدین وسیله می توانند اطلاعات موجود در بانک اطلاعاتی را مشاهده کند یا به راحتی بوسیله کاربری که دسترسی مدیریتی دارد به سایت وارد شود، حتی احتمال اینکه داده های موجود در بانک اطلاعاتی نیز حذف شوند وجود دارد. جلوگیری از حملات SQL Injection به راحتی قابل پیاده سازی است، اکثر زبان های برنامه نویسی مانند سی شارپ یا جاوا، برای اجرای کوئری ها بر روی بانک های اطلاعات از قابلیتی به نام پارامترها پشتیبانی می کنند که از پارامترها برای قراردادن مقادیر ورودی کاربر در کوئری استفاده می کنند. برای مثال، کوئری زیر را در نظر بگیرید که برای گرفتن یک کاربر بر اساس نام کاربری استفاده می شود (در زبان سی شارپ):

var query = "select * from Users where Username = N'" + username + "';";
...

در صورتی که کوئری به صورت بالا اجرا شود، کاربری که به SQL Injection آشنایی داشته باشد به راحتی می تواند کوئری های مورد نظر خود را بر روی سرور اجرا کند، اما می توان بوسیله پارامتر ها این مشکل را حل کرد:

var query = "select * from Users where username = @p1";
var command = new SqlCommand(query,cnn);
command.Parameters.Add(new SqlParameter("p1",username));

با اجرای کوئری به صورت بالا، امکان SQL Injection دیگر وجود نخواهد داشت. علاوه بر اینکه می توان از پارامترها استفاده کرد، استفاده از ORM ها نیز راهکاری دیگر برای جلوگیری از حملات SQL Injection است، اکثر زبان های برنامه نویسی از ORM ها پشتیبانی می کنند، برای مثال، اگر در سی شارپ از Entity Framework یا در جاوا از Hibernate استفاده می کنید، نیازی نیست که نگران حملات SQL Injection باشید.

آموزش امن کردن وبسایت در 9 مرحله به زبان ساده

3. حملات XSS

حملات XSS که مخفف Cross Site Scripting است، به حملاتی گفته می شود که شخص حمله کننده، در داخل محتوای سایت شما یک کد JavaScript یا لینکی از یک فایل JavaScript قرار می دهد و بدین وسیله می تواند محتویات صفحه شما را تغییر دهد، مانند Deface کردن وب سایت. برای مثال، اگر وب سایت شما قابلیتی دارد که کاربران می توانند بر روی مطالب Comment ارسال کنند، باید حتماً عملیات Validation بر روی محتوای ارسال شده از طرف کاربر اعمال شود و در صورت شناسایی کد JavaScript یا فایل JS حتماً از نمایش Comment جلوگیری شود.

در Framework های امروزی مانند ASP.NET یا کتابخانه هایی مانند Angular روش های زیادی وجود دارد که از حملات XSS جلوگیری شود، محدودیت هایی مانند ارسال کدهای HTML به سمت سرور یا قابلیت های Encode کردن مقادیر ورودی توسط کاربر که به صورت خودکار تگ های HTML به صورت HTML Entities تبدیل می شوند و امکان اجرای کدهای مخرب وجود نخواهد داشت. روش های دیگری نیز برای جلوگیری از حملات XSS وجود دارد، مانند CSP یا Content Security Policy، در این روش از جانب Server یک Header برای مرورگر ارسال می شود و مرورگر روند اجرای کدهای جاوا اسکریپت را بر روی صفحات وب محدود می کند.

آموزش امن کردن وبسایت در 9 مرحله به زبان ساده

4. نمایش خطاها

یکی از اشتباهاتی که اکثر توسعه دهندگان مرتکب می شوند، نمایش محتوای خطا در صورت وقوع آن به کاربر نهایی است. همیشه به خاطر داشته باشد که کاربر نهایی به هیچ عنوان نباید محتوای خطای ایجاد شده در سرور را مشاهده کند. بعضی وقت ها در خطای تولید شده اطلاعاتی در اختیار کاربر قرار میگیرد که باعث می شود کاربر بتواند بوسیله آن به وب سایت شما حمله کند. سعی کنید به جای نمایش صفحه خطای سرور، کاربر را به سمت صفحات Customize شده بر اساس نوع خطا هدایت کنید و پیام خطا و سایر اطلاعات مربوط به آن را در جایی مانند بانک اطلاعاتی نگهداری کنید (اصطلاحاً از خطاها Log بگیرید).

آموزش امن کردن وبسایت در 9 مرحله به زبان ساده

5. اعمال Validation در سمت سرور

اکثر شما دوستان عزیزی که کار توسعه وب سایت انجام می دهید می دانید که عملیات Validation بر روی ورودی های کاربر امری ضروری است و باید داده های ورودی کاربر Validate شده و سپس در بانک اطلاعاتی ذخیره شوند. دو روش برای Validate کردن ورودی های کاربر وجود دارد، روش اول Client-Side Validation است که در آن اطلاعات کاربر بوسیله کدهای JavaScript و بر روی مرورگر انجام می شود و یکی Server-Side Validation است که اطلاعات پس از ارسال به سرور و قبل از ذخیره شدن در بانک اطلاعاتی Validate می شوند. متاسفانه برخی از دوستان توسعه دهنده تنها به Validation در سمت کلاینت اکتفا می کنند که این امر می تواند بسیار خطرناک باشد. همانطور که گفتم عملیات Client-Side Validation وابسته به جاوا اسکریپت است و با غیرفعال کردن JavaScript بر روی مرورگر، عملاً اعتبارسنجی سمت کلاینت غیر فعال می شود، همیشه به خاطر داشته باشید که Client-Side Validation برای بهبود تجربه کاربری (UX) است و Server-Side Validation برای افزایش امنیت وب سایت شما.

آموزش امن کردن وبسایت در 9 مرحله به زبان ساده

6. استفاده از Captcha در فرم های ورودی

همیشه در فرم هایی که کاربرها به صورت Guest یا مهمان به آن دسترسی دارند از Captcha استفاده کنید، کد کپچا کدی است که به صورت تصادفی ایجاد شده و به صورت تصویر به کاربر نمایش داده می شود و کاربر با وارد کردن آن کد مشخص می کند که یک کاربر واقعی است. فرم هایی مانند تماس با ما یا فرم ورود حتماً می بایست کد کپچا داشته باشند، در غیر اینصورت ممکن است توسط ربات هایی که فرم ها را به صورت خودکار پر می کنند مورد حمله قرار بگیرید و در مدت کوتاهی هزاران پیام در بانک اطلاعاتی شما ارسال شود!

آموزش امن کردن وبسایت در 9 مرحله به زبان ساده

7. کلمه های عبور

همیشه سعی کنید کلمه عبور کاربرها را با شیوه های تائید شده در بانک اطلاعاتی ذخیره کنید، برای مثال، حتماً کلمه عبور را به صورت Hash شده ذخیره کنید، از الگوریتم های مطمئن برای ایجاد Hash استفاده کنید، الگوریتم هایی مانند MD5 الگوریتم های امنی برای ایجاد Hash نیستند و به راحتی می توان Hash های MD5 را شکست، از الگوریتم های مانند SHA-2 یا SHA256 و SHA512 استفاده کنید. از مکانیزم PasswordSalt برای ایجاد هش کلمه های عبور استفاده کنید تا بانک کاربران شما به راحتی مورد حمالات Brute Force قرار نگیرند. موارد دیگری را نیز می توانید مد نظر بگیرید، مانند اجبار کردن کاربران به انتخاب کلمات عبور با شرایط خاص، برای مثال، استفاده از کاراکتر و عدد و علامت هایی مانند @ و ! در کلمه عبور می تواند باعث بالارفتن امنیت کلمه عبور شود، یک حداقل برای کلمه عبور مشخص کنید،

آموزش امن کردن وبسایت در 9 مرحله به زبان ساده

8. آپلود فایل ها

یکی از امکاناتی که اکثر وب سایت ها امروزه از آن پشتیبانی می کنند آپلود فایل ها بر روی سرور است که این موضوع می تواند باعث بالا رفتن ریسک امنیتی وب سایت شود. ممکن است فایل هایی که آپلود می شوند حاوی ویروس یا تروجان باشند یا حتی اسکریپت های مخربی باشند که می توانند به سرور سایت شما آسیب برسانند. برخی از توسعه دهندگان به پسوند یک فایل اکتفا می کنند، اما فراموش نکنید، حتی فایل های تصویری نیز می توانند حاوی کدهای مخربی باشند که بر روی سرور اجرا می شوند. یکی از روش هایی که می توان استفاده کرد، ذخیره فایل آپلود شده با یک نام بدون پسوند است، برای مثال، در ASP.NET می توان فایل ها را بدون پسوند که نام آن یک GUID است دخیره کرد و در زمان ارسال فایل برای کلاینت نام فایل را مجدد برای آن مشخص کرد، با این روش ریسک امنیتی فایل های موجود در سرور کاهش می یابد. از طرفی دیگر باید دسترسی مستقیم کاربران به فایل های آپلود شده بر روی سرور را بست که این کار بر روی وب سرور مورد استفاده امکان پذیر است.

آموزش امن کردن وبسایت در 9 مرحله به زبان ساده

9. استفاده از SSL

استفاده از پروتکل HTTPS به کاربر سایت شما این اطمینان را میدهد که تمامی ارتباطات او با سرور سایت به صورت امن انجام می شود. فرم هایی مانند فرم Login یا فرم هایی که اطلاعاتی مانند شماره کارت بانکی را از کاربر دریافت می کند حتماً باید از پروتکل HTTPS استفاده کنند. شما می توانید SSL مورد نیاز خود را خریداری کنید که البته در قیمت های متفاوتی ارائه می شوند یا اینکه از سایت هایی که پروتکل های رایگان ارائه می دهند استفاده کنید. فراموش نکنید که در وب سایت خود حتماً از پروتکل HTTPS استفاده کنید.


حسین احمدی
حسین احمدی

بنیانگذار توسینسو و برنامه نویس و توسعه دهنده ارشد وب

حسین احمدی ، بنیانگذار TOSINSO ، توسعه دهنده وب و برنامه نویس ، بیش از 12 سال سابقه فعالیت حرفه ای در سطح کلان ، مشاور ، مدیر پروژه و مدرس نهادهای مالی و اعتباری ، تخصص در پلتفرم دات نت و زبان سی شارپ ، طراحی و توسعه وب ، امنیت نرم افزار ، تحلیل سیستم های اطلاعاتی و داده کاوی ...

نظرات