
امنیت سایت
اینترنت مکان خطرناکی است!
به طور منظم، ما در مورد از دسترس نبودن وب سایت ها به دلیل حملات انکار سرویس، یا نمایش اطلاعات تغییر یافته (و اغلب مخرب) در صفحات اصلی خود می شنویم.
در سایر موارد پرمخاطب، میلیونها رمز عبور، آدرس ایمیل و جزئیات کارت اعتباری به صورت عمومی درز کرده است که کاربران وبسایت را در معرض شرمساری شخصی و ریسک مالی قرار میدهد.
هدف از امنیت وب سایت جلوگیری از این (یا هر گونه) حملاتی است.
تعریف رسمیتر امنیت وبسایت، عمل/عمل محافظت از وبسایتها در برابر دسترسی، استفاده، تغییر، تخریب یا اختلال غیرمجاز است.
امنیت وب سایت مؤثر مستلزم تلاش طراحی در کل وب سایت است: در برنامه وب شما، پیکربندی وب سرور، خط مشی های شما برای ایجاد و تمدید رمزهای عبور، و کد سمت سرویس گیرنده.
در حالی که همه اینها بسیار شوم به نظر می رسد، خبر خوب این است که اگر از یک چارچوب وب سمت سرور استفاده می کنید، تقریباً مطمئناً “به طور پیش فرض” مکانیسم های دفاعی قوی و فکر شده در برابر تعدادی از حملات رایج تر را فعال می کند.
سایر حملات را می توان از طریق پیکربندی وب سرور شما کاهش داد، برای مثال با فعال کردن HTTPS. در نهایت، ابزارهای اسکنر آسیب پذیری در دسترس عموم وجود دارد که می تواند به شما کمک کند تا دریابید که آیا اشتباهات آشکاری مرتکب شده اید یا خیر.
بقیه این مقاله جزئیات بیشتری در مورد چند تهدید رایج و برخی از مراحل ساده ای که می توانید برای محافظت از سایت خود بردارید، به شما ارائه می دهد.
توجه:این یک مبحث مقدماتی است که به شما کمک می کند تا در مورد امنیت وب سایت فکر کنید، اما جامع نیست.
امنیت سایت
تهدیدات امنیتی وب سایت
این بخش تنها تعدادی از رایج ترین تهدیدات وب سایت و نحوه کاهش آنها را فهرست می کند.
همانطور که می خوانید، توجه داشته باشید که چگونه تهدیدها زمانی که برنامه وب به داده های دریافتی از مرورگر اعتماد دارد یا به اندازه کافی پارانویا نیست، موفق تر هستند.
امنیت سایت
اسکریپت بین سایتی (XSS)
XSS اصطلاحی است که برای توصیف دسته ای از حملات استفاده می شود که به مهاجم اجازه می دهد تا اسکریپت های سمت کلاینت را از طریق وب سایت به مرورگرهای سایر کاربران تزریق کند.
از آنجایی که کد تزریق شده از سایت به مرورگر می آید، کد مورد اعتماد است و می تواند کارهایی مانند ارسال کوکی مجوز سایت کاربر برای مهاجم را انجام دهد.
هنگامی که مهاجم کوکی را داشته باشد، میتواند وارد سایتی شود که انگار همان کاربر است و هر کاری که کاربر میتواند انجام دهد، مانند دسترسی به جزئیات کارت اعتباری، دیدن جزئیات تماس، یا تغییر رمز عبور.
توجه:آسیبپذیریهای XSS از نظر تاریخی بیش از هر نوع تهدید امنیتی دیگری رایج بودهاند.
آسیبپذیریهای XSS بر اساس نحوه بازگرداندن اسکریپتهای تزریق شده به مرورگر توسط سایت، به دو دسته منعکس شده و پایدار تقسیم میشوند.
یک آسیبپذیری بازتابشده XSS زمانی رخ میدهد که محتوای کاربر که به سرور ارسال میشود بلافاصله برگردانده شود و برای نمایش در مرورگر تغییر داده نشود.
هر اسکریپت در محتوای اصلی کاربر هنگام بارگیری صفحه جدید اجرا می شود.
به عنوان مثال، یک تابع جستجوی سایت را در نظر بگیرید که در آن عبارات جستجو به عنوان پارامترهای URL کدگذاری می شوند و این عبارات همراه با نتایج نمایش داده می شوند.
یک مهاجم میتواند پیوند جستجویی بسازد که حاوی یک اسکریپت مخرب به عنوان پارامتر باشد (به عنوان مثال، http://developer.mozilla.org?q=beer ) و آن را برای کاربر دیگری ایمیل کنید.
اگر کاربر هدف روی این “لینک جالب” کلیک کند، اسکریپت با نمایش نتایج جستجو اجرا می شود.
همانطور که قبلاً بحث شد، این به مهاجم تمام اطلاعاتی را می دهد که برای ورود به سایت به عنوان کاربر هدف، به طور بالقوه خرید به عنوان کاربر یا اشتراک گذاری اطلاعات تماس خود، نیاز دارند.
یک آسیبپذیری پایدار XSS زمانی رخ میدهد که اسکریپت مخرب در وبسایت ذخیره میشود و بعداً بدون تغییر برای سایر کاربران نمایش داده میشود تا ناخواسته اجرا شوند.
به عنوان مثال، یک تابلوی بحث که نظراتی را می پذیرد که حاوی HTML اصلاح نشده است، می تواند یک اسکریپت مخرب از یک مهاجم را ذخیره کند.
هنگامی که نظرات نمایش داده می شود، اسکریپت اجرا می شود و می تواند اطلاعات مورد نیاز برای دسترسی به حساب کاربر را برای مهاجم ارسال کند.
این نوع حمله بسیار محبوب و قدرتمند است، زیرا مهاجم حتی ممکن است هیچ ارتباط مستقیمی با قربانیان نداشته باشد.
در حالی که دادههای درخواستهای POST یا GET رایجترین منبع آسیبپذیریهای XSS هستند، هر داده از مرورگر به طور بالقوه آسیبپذیر است، مانند دادههای کوکی ارائهشده توسط مرورگر یا فایلهای کاربر که آپلود و نمایش داده میشوند.
بهترین دفاع در برابر آسیب پذیری های XSS حذف یا غیرفعال کردن هر نشانه گذاری است که به طور بالقوه می تواند حاوی دستورالعمل هایی برای اجرای کد باشد.
برای HTML این شامل عناصری مانند:
تزریق SQL
آسیبپذیریهای تزریق SQL به کاربران مخرب این امکان را میدهد تا کد SQL دلخواه را در پایگاه داده اجرا کنند و به دادهها اجازه دسترسی، اصلاح یا حذف بدون توجه به مجوزهای کاربر را میدهند.
یک حمله تزریق موفق ممکن است هویت ها را جعل کند، هویت های جدیدی با حقوق مدیریت ایجاد کند، به همه داده های روی سرور دسترسی داشته باشد یا داده ها را از بین ببرد/تغییر دهد تا غیرقابل استفاده شود.
انواع تزریق SQL شامل تزریق SQL مبتنی بر خطا، تزریق SQL بر اساس خطاهای بولی و تزریق SQL مبتنی بر زمان است.
این آسیبپذیری در صورتی وجود دارد که ورودی کاربر که به دستور SQL زیربنایی ارسال میشود، بتواند معنای عبارت را تغییر دهد.
به عنوان مثال، کد زیر برای فهرست کردن همه کاربران با یک نام خاص (userName) که از یک فرم HTML تهیه شده است در نظر گرفته شده است:
عبارت = “انتخاب * از کاربران WHERE name = ‘” + username + “‘;”
اگر کاربر یک نام واقعی را مشخص کند، عبارت همانطور که در نظر گرفته شده است کار خواهد کرد.
با این حال، یک کاربر مخرب می تواند به طور کامل رفتار این دستور SQL را به عبارت جدید در مثال زیر، با مشخص کردن a’;DROP TABLE users; انتخاب * از اطلاعات کاربر WHERE ‘t’ = ‘t برای نام کاربری.
SELECT * FROM users WHERE name = ‘a’;Drop TABLE users; انتخاب * از اطلاعات کاربر WHERE ‘t’ = ‘t’;
دستور اصلاح شده یک دستور SQL معتبر ایجاد می کند که جدول کاربران را حذف می کند و تمام داده ها را از جدول اطلاعات کاربر (که اطلاعات هر کاربر را نشان می دهد) انتخاب می کند.
این کار به این دلیل کار می کند که قسمت اول متن تزریق شده (a’;) عبارت اصلی را کامل می کند.
برای جلوگیری از این نوع حمله، باید اطمینان حاصل کنید که هر داده کاربر که به یک پرس و جوی SQL ارسال می شود، نمی تواند ماهیت پرس و جو را تغییر دهد.
یکی از راه های انجام این کار فرار از تمام کاراکترهای ورودی کاربر است که در SQL معنای خاصی دارند.
نکته:دستور SQL کاراکتر ‘ را به عنوان آغاز و پایان یک رشته تحت اللفظی در نظر می گیرد.
با گذاشتن یک علامت معکوس جلوی این کاراکتر (\’)، از نماد فرار می کنیم و به SQL می گوییم که در عوض آن را به عنوان یک کاراکتر (فقط بخشی از رشته) در نظر بگیرد.
در عبارت زیر از کاراکتر ‘ فرار می کنیم. SQL اکنون نام را به صورت کل رشته به صورت پررنگ تفسیر می کند (که در واقع یک نام بسیار عجیب است، اما مضر نیست).
SELECT * FROM users WHERE name = ‘a\’;Drop TABLE users; انتخاب * از اطلاعات کاربر WHERE \’t\’ = \’t’;
فریمورک های وب اغلب از شخصیتی که برای شما فرار می کند مراقبت می کنند.
برای مثال، جنگو تضمین میکند که دادههای کاربر ارسال شده به مجموعههای پرسشی (پرس و جوهای مدل) فرار میشوند.
امنیت سایت
جعل درخواست بین سایتی (CSRF)
حملات CSRF به کاربر مخرب این امکان را می دهد که بدون اطلاع یا رضایت کاربر، اقداماتی را با استفاده از اعتبار کاربری دیگر انجام دهد.
این نوع حمله به بهترین شکل با مثال توضیح داده می شود.
جاش کاربر مخربی است که میداند یک سایت خاص به کاربرانی که وارد شدهاند اجازه میدهد با استفاده از یک درخواست HTTP POST که شامل نام حساب و مقداری پول است، پول را به یک حساب مشخص ارسال کنند.
جاش فرمی می سازد که شامل اطلاعات بانکی و مقداری پول به عنوان فیلدهای مخفی است و آن را برای سایر کاربران سایت ایمیل می کند (با دکمه ارسال که به عنوان پیوندی به یک سایت “سریع پولدار شوید”).
اگر کاربر روی دکمه ارسال کلیک کند، یک درخواست HTTP POST حاوی جزئیات تراکنش و هر کوکی سمت کلاینت که مرورگر با سایت مرتبط است به سرور ارسال میشود (افزودن کوکیهای سایت مرتبط به درخواستها رفتار عادی مرورگر است).
سرور کوکیها را بررسی میکند و از آنها برای تعیین اینکه آیا کاربر وارد شده است و اجازه انجام تراکنش را دارد یا خیر، استفاده میکند.
نتیجه این است که هر کاربری که هنگام ورود به سایت معاملاتی روی دکمه ارسال کلیک کند، معامله را انجام می دهد.
جاش پولدار میشه
نکته:ترفند اینجاست که جاش نیازی به دسترسی به کوکی های کاربر (یا دسترسی به اعتبار) ندارد.
مرورگر کاربر این اطلاعات را ذخیره می کند و به طور خودکار آن را در تمام درخواست های سرور مرتبط گنجانده است.
یکی از راههای جلوگیری از این نوع حمله این است که سرور بخواهد درخواستهای POST شامل یک راز ایجاد شده توسط کاربر خاص باشد.
راز هنگام ارسال فرم وب مورد استفاده برای انتقال، توسط سرور ارائه می شود.
این رویکرد جاش را از ایجاد فرم خود باز می دارد، زیرا او باید رازی را که سرور برای کاربر فراهم می کند بداند.
حتی اگر او راز را کشف کند و یک فرم برای یک کاربر خاص ایجاد کند، دیگر نمی تواند از همان فرم برای حمله به هر کاربر استفاده کند.
چارچوب های وب اغلب شامل چنین مکانیسم های پیشگیری از CSRF می شوند.
امنیت سایت
تهدیدهای دیگر
سایر حملات/آسیب پذیری های رایج عبارتند از:
⦁ کلیک جک
در این حمله، یک کاربر مخرب کلیک هایی را که برای یک سایت سطح بالای قابل مشاهده است ربوده و آنها را به صفحه مخفی زیر آن هدایت می کند.
این تکنیک ممکن است به عنوان مثال برای نمایش یک سایت بانکی قانونی استفاده شود، اما اعتبار ورود به سیستم را در یک توسط مهاجم کنترل میشود، ضبط کند.
Clickjacking همچنین می تواند برای واداشتن کاربر به کلیک بر روی دکمه ای در یک سایت قابل مشاهده استفاده شود، اما در انجام این کار در واقع ناخواسته روی یک دکمه کاملاً متفاوت کلیک کنید.
به عنوان یک دفاع، سایت شما می تواند با تنظیم هدرهای HTTP مناسب از قرار گرفتن خود در iframe در سایت دیگر جلوگیری کند.
⦁ انکار سرویس (DoS)
DoS معمولاً با پر کردن یک سایت هدف با درخواست های جعلی به دست می آید تا دسترسی به یک سایت برای کاربران قانونی مختل شود.
درخواست ها ممکن است متعدد باشند، یا ممکن است به صورت جداگانه مقادیر زیادی از منابع را مصرف کنند (به عنوان مثال، خواندن آهسته یا آپلود فایل های بزرگ).
دفاعهای DoS معمولاً با شناسایی و مسدود کردن ترافیک «بد» و در عین حال اجازه دادن به پیامهای قانونی کار میکنند.
این دفاع ها معمولاً قبل یا در وب سرور قرار دارند (آنها بخشی از خود برنامه وب نیستند).
⦁ پیمایش دایرکتوری (پرونده و افشاء)
در این حمله، یک کاربر مخرب سعی می کند به قسمت هایی از سیستم فایل وب سرور دسترسی پیدا کند که نباید به آنها دسترسی داشته باشد.
این آسیبپذیری زمانی رخ میدهد که کاربر بتواند نام فایلهایی را که شامل کاراکترهای ناوبری سیستم فایل (مثلاً ../../) هستند، ارسال کند.
راه حل این است که ورودی را قبل از استفاده ضدعفونی کنید.
⦁ گنجاندن فایل
در این حمله، کاربر می تواند یک فایل “ناخواسته” را برای نمایش یا اجرا در داده های ارسال شده به سرور مشخص کند.
هنگامی که بارگذاری می شود، این فایل ممکن است در سرور وب یا سمت سرویس گیرنده (که منجر به حمله XSS می شود) اجرا شود.
راه حل این است که ورودی را قبل از استفاده ضدعفونی کنید.
⦁ فرمان تزریق
حملات تزریق فرمان به کاربر مخرب اجازه می دهد تا دستورات سیستم دلخواه را بر روی سیستم عامل میزبان اجرا کند.
راه حل این است که ورودی کاربر قبل از اینکه در تماس های سیستمی استفاده شود، پاکسازی شود.
امنیت سایت
چند پیام کلیدی
تقریباً تمام اکسپلویتهای امنیتی در بخشهای قبلی زمانی موفق هستند که برنامه وب به دادههای مرورگر اعتماد کند.
هر کار دیگری که برای بهبود امنیت وب سایت خود انجام می دهید، باید تمام داده های منشأ کاربر را قبل از نمایش در مرورگر، استفاده در پرس و جوهای SQL یا ارسال به سیستم عامل یا تماس سیستم فایل، پاکسازی کنید.
هشدار:مهم ترین درسی که می توانید در مورد امنیت وب سایت یاد بگیرید این است که هرگز به داده های مرورگر اعتماد نکنید.
این شامل دادهها در پارامترهای URL درخواستهای GET، درخواستهای POST، سرصفحهها و کوکیهای HTTP، و فایلهای آپلود شده توسط کاربر است، اما محدود به آن نمیشود.
همیشه تمام داده های دریافتی را بررسی و ضدعفونی کنید.
همیشه بدترین را در نظر بگیرید..
تعدادی از اقدامات ملموس دیگری که می توانید انجام دهید عبارتند از:
⦁ از مدیریت رمز عبور موثرتر استفاده کنید.
رمزهای عبور قوی را تشویق کنید. احراز هویت دو مرحله ای را برای سایت خود در نظر بگیرید، به طوری که کاربر علاوه بر رمز عبور، باید کد احراز هویت دیگری نیز وارد کند (معمولاً کدی که از طریق برخی سخت افزارهای فیزیکی که فقط کاربر خواهد داشت، مانند یک کد در پیامک ارسال شده به آنها، تحویل داده می شود. تلفن).
⦁ وب سرور خود را برای استفاده از HTTPS و امنیت حمل و نقل سخت HTTP (HSTS) پیکربندی کنید.
HTTPS داده های ارسال شده بین مشتری و سرور شما را رمزگذاری می کند.
این تضمین میکند که اعتبار ورود، کوکیها، دادههای درخواستهای POST و اطلاعات هدر به راحتی در دسترس مهاجمان نیست.
⦁ محبوب ترین تهدیدها را دنبال کنید (لیست OWASP فعلی اینجا است) و ابتدا رایج ترین آسیب پذیری ها را برطرف کنید.
⦁ از ابزارهای اسکن آسیب پذیری برای انجام تست امنیتی خودکار در سایت خود استفاده کنید.
بعداً، وبسایت بسیار موفق شما نیز ممکن است با ارائه عیدی باگ مانند موزیلا، اشکالاتی را پیدا کند.
⦁ فقط داده هایی را که نیاز دارید ذخیره و نمایش دهید.
به عنوان مثال، اگر کاربران شما باید اطلاعات حساسی مانند جزئیات کارت اعتباری را ذخیره کنند، فقط تعداد کافی از شماره کارت را نشان دهید که توسط کاربر قابل شناسایی باشد و نه به اندازه ای که بتواند توسط یک مهاجم کپی شده و در سایت دیگری استفاده شود.
رایج ترین الگو در این زمان این است که فقط 4 رقم آخر شماره کارت اعتباری نمایش داده شود.
چارچوب های وب می توانند به کاهش بسیاری از آسیب پذیری های رایج تر کمک کنند.
همچنین شما میتوانید مطالبی از قبیل افزونه wp super cache ، ادامه مطلب در وردپرس ، افزایش محدودیت آپلودپرس و… را مطالعه نمایید.
جهت آموزش های بیشتر اینستاگرام آژانس مدلین را فالو داشته باشید.
دیدگاهتان را بنویسید