مشکلات امنیتی در وبسایت ها می توانند بسیار خطرناک باشند و باعث از بین رفتن سرمایه و اعتبار سایت بشوند.همچنین این مشکلات می توانند باعث افشا شدن اطلاعات خصوصی کاربران شده و برای آنها مشکلاتی ایجاد کنند.به منظور جلوگیری از این مشکلات برخی از مهم ترین آسیب های امنیتی را به همراه راه برطرف کردن آنها را برای شما ذکر می کنیم.
یکی ازمهم ترین مشکلات امنیتی سایت آسیب پذیری SQLInjection می باشد.بدلیل این که امکان دسترسی به پایگاه داده سایت را به نفوذ کننده می دهد.
این آسیب پذیری در مواقعی اتفاق می افتد که به صورت مستقیم از query های SQL استفاده می شود و قسمتی ازquery بدون فیلتر شدن از کار برگرفته می شود.برای مثال برای یافتن پست در خواستی کاربر با این آدرس:
http://example.com/Posts.php?post_id=5
ازquery زیر استفاده شود:
SELECT * FROM Posts WHERE id={post_id}
در اینصورت کاربر می تواند با وارد کردن آدرس زیر تمام پست های شما را حذف کند.
http://example.com/Posts.php?post_id=5;DROP TABLE Posts;
البته این نوع مشکل می تواند دسترسی به تمام پایگاه داده را برای فرد مخرب فراهم کند.
برای جلوگیری از بروز این مشکل بهترین راه استفاده از prepared statement می باشد.
این آسیب پذیری با فریب کاربر وارد شده به سایت می تواند باعث انجام تغییراتی در سایت بشود.برای مثال کاربر ادمین با وارد کردن آدرس زیر می تواند پستی را حذف کند:
http://example.com/Admin/DeletePost.php?post_id=5
حال اگرفرد مخرب کاربر ادمین را فریب دهد تا روی لینکی با آدرس بالا کلیک کند بدون متوجه شدن کاربر ادمین می تواند پستی را حذف کند.
برای جلوگیری از این مشکل می توان به ازای هر درخواست referrer آن را برسی کرد و اگر referer از سایت دیگری بود اجازه انجام عملیات داده نشود.
همچنین می توان از شناسه مشخص برای هر نشست کاربر استفاده کرد.برای مثال برای حذف پست لینک زیر تولید شود:
http://example.com/Admin/DeletePost.php?post_id=5&token=UNIQUEID(e.g.:11222a0756cc9ff760155f9f28b61e0a)
این آسیب پذیری در مواقعی که ورودی کاربر در قسمتی از سایت نمایش داده می شود به وجود می آید.
برای مثال در قسمت نظرات سایت متنی وارد شده ونمایش داده می شود در این صورت اگر ورودی فیلتر نشود کاربر می تواند با وارد کردن اسکریپت خاص عمل کرد سایت را مختل کند.
خطرناک ترین حالت این باگ برای بدست آوردن sessionid افراد است. به این طریق که مخرب از طریق اسکریپت cookie های افراد را خوانده و می تواند خود را به جای آنها جا بزند.
برای جلوگیری از این آسیب پذیری باید کد های html ورودی کاربر را فیلتر کرده و درهنگام نمایش حتی المقدور از نمایش غیر html اطلاعات استفاده کنید.
همچنین در هنگام ایجاد cookie ها باید دسترسی script ها را قطع کرد غیر از مواردی که اطلاعات ارزش سروری ندارند و فقط در نمایش سایت تاثیر دارند و باید اسکریپت به انها دسترسی داشته باشد.
این حملات به این صورت انجام می شوند که تعداد زیادی درخواست به صورت همزمان به سرور فرستاده می شوند و مشکلاتی را برای آن ایجاد می کنند تا در نهایت سایت از دسترس خارج شود.
این حملات معمولا در سطح گسترده انجام می شوند و نمی توان به صورت کلی از آنها جلوگیری کرد تنها می توان کار را برای افراد مخرب سخت کرد.
برای کاهش آسیب این حملات باید درخواست های کاربر را کنترل کرد تا از حد معمول بیشتر نشود.
همچنین بخش هایی از سایت که استفاده زیادی ازمنابع می کنند باید با کد capcha محافظت شوند.
برای مثال بخش ثبت نام سایت علاوه بر استفاده از منابع باعث به وجود آمدن تعداد زیادی سطر در پایگاه داده می شود که باعث کندی سایت و زود تر از دسترس خارج شدن آن می شود.
این بخش ها را حتماً با capcha محافظت کنید(پیشنهاد ما استفاده از recapcha است)
این حملات معمولا در بخش های ورود به سایت انجام می شوند.به این طریق که تمامی حالات ممکن رمز عبور توسط برنامه هایی چک می شوند.برای جلوگیری از این حملات کاربران را وادار به وارد کردن رمز های با طول زیاد ترکیبی کنید هم چنین از capcha نیز درصورت لزوم استفاده کنید.
این مشکل به این صورت است که در برخی از سایت ها اسکریپتی برای دانلود فایل ها قرار داده می شود(به منظورش شمارش دانلود و اعتبار سنجی یا ...).اگر در این اسکریپت ها فیلتری برای فایل ها قرار داده نشود کاربر می تواند با درخواست دانلود فایل های حیاتی سایت به اطلاعات آن دسترسی پیدا کند.
برای مثال فایلی درون سرور قرار داده شده که اطلاعات پایگاه داده درون آن ذخیره شده است و اسکریپت دانلود فایل نیز به صورت زیر عمل می کند.
http://example.com/download.php?file=musics/music.mp3
کاربر می تواند با وارد کردن ادرس زیر فایل حاوی اطلاعات پایگاه داده شما را دانلود کند.
http://example.com/download.php?file=db_config.php
این بخش ها برای لینک هایی که به خارج از سایت می شوند استفاده می گردند.اگر این بخش ها بدون کنترل کار کنند می توانند زمینه برای افراد نفوذ گر فراهم آورند.
برای مثال فرد نفوذگر صفحه ای تقلبی (fakepage) از صفحه ورود به سایت شما درست می کند. همچنین در سایت بخش تغییر مسیر کنترل نشده ای وجود دارد.
نفوذ گر می تواند با استفاده از این تغییر مسیر دهنده لینک صفحه جعلی خود را بگونه ای طراحی کند تا کاربران سایت را فریب دهد برای مثال:
http://example.com/goto.php?http://afakepage.com
کاربر بادیدن نام سایت شما در آدرس به آن اعتماد کرده و به صفحه طراحی شده نفوذ گر وارد می شود و با وارد کردن اطلاعات باعث ایجاد دسترسی به حسابش در سایت شما توسط نفوذگر می شود.
استفاده از ابزار هایی که مشکلات امنیتی شناخنه شده دارند می توانند به نفوذ گر کمک زیادی در نفوذ به سایت بکنند.زیرا راه نفوذ به این ابزار ها از قبل مشخص شده و نفوذ گر می تواند به راحتی به سایت نفوذ کند.(اغلب نفوذ های انجام شده به مدیریت محتوا های آماده نظیر وردپرس به این دلیل اند)
فعال بودن نمایش محتوای پوشه های سایت می تواند به نفوذگر در یافتن فایل های آسیب پذیر کمک کند برای جلوگیری از این مشکل در قسمت تنظیمات میزبان سایت directory listing را غیر فعال کنید.
این کار به این منظور انجام می گیرد که اگر اطلاعات سایت به دست نفوذ گر نیز افتاد نتواند از آنها استفاده کند و با اطلاعاتی نامفهوم مواجه بشود.
برای این کار باید اطلاعات مهم سایت توسط الگوریتم های مناسب نظیر sha یا md5 به صورت hash شده در آیند.
در صورت لزوم به بازگشت این اطلاعات میتوانید با یک کلید امن اطلاعات خود را کد (encrypt) کنید تا در موقع نیاز آنها را باز گردانی کنید.
امن سازی وبسایت و از بین بردن مشکلات امنیتی سایت می تواند از هک شدن سایت و افشای اطلاعات شخصی آنها جلوگیری کند و خطر از بین رفتن سرمایه را به حد اقل برساند
باتشکر از توجه شما