امروز: ۰۳ آذر ۱۴۰۳
در مسیر توسعه فردی و سازمانی
اشتراک دانش بهنام بهادری » حملات CSRF (XSRF) (۱۳۹۵/۶/۱۰)
تایید شده

حملات CSRF یا XSRF، در این حمله کاربر در صفحه مدیریت سایت خود لاگین است یا مهاجم از طریق یک لینک کاربر را مجبور به وردو به مدیریت سایت میکند بدون آنکه کاربر متوجه این موضوع باشد و درنهایت به صفحه مورد نظر دسترسی خواهد یافت. این حمله از طریق کشف آدرس هایی که محتوایی را تایید و ارسال میکنند اتفاق می افتد (مانند صفحات لاگین). کدهای اجرایی میتواند از قالب یک URL source در یک تصویر ذخیره شود بصورتی که کاربر از رخداد و اجرای URL آگاهی پیدا نکند. عموما تزریق از طریق image tag در HTML يا JavaScript انجام مي شود در صورتی که در سایت بصورت غیر امن (http) متصل باشیم و یا کوکی ها روی مرورگر ذخیره شده باشند این حمله با احتمال موفقیت بالاتری اجرا خواهد شد. 


سرویس PayPal یک مرتبه با آسبی پذیری CSRF روبرو شده است. نمونه دیگر این مشکل در Google رخ داد، در حالی که مهاجم میتوانست اطلاعات اکانت Google کاربر را کشف کند و به اکانت قربانی دسترسی یابد.


عموما صفحات ثبت نام عمومی که با ارسال و دریافت اطلاعات طراحی شده اند بیشتر هدف این حمله قرار میگیرند و از متدهایی مانند GET یا POST میتواند استفاده کند.


راهکار رایج برای مقابله این مشکل ایجاد یک رشته کد (توکن) بصورت تصادفی که هم برای کوکی استفاده میشود و هم در آدرس ایجاد شده بصورت پنهان وجود خواهد خواهد داشت. در هنگام ارسال فرم بررسی می شود آیا CSRFToken در فرم همان CSRFToken ذخیره شده در کوکی است یا خیر و در صورت یکسان بودن اجازه اجرا و ارسال اطلاعات و یا لاگین را خواهد داد.


راهکارها:


همانطور که اشاره شد جلوگیری از CSRF معمولا نیاز به گنجاندن رمز غیر قابل پیش بینی در هر درخواست HTTP دارد. این کد باید حداقل و برای هر session کاربر بصورت مجزا باشد. 


1 - قرار گرفتن یک Token منحصر به فرد بصورت پنهان در بدنه در خواست HTTP ارسال میشود.


2- استفاده از reauthenticate درخواست با استفاده از ابزاری مانند کد CAPTCHA


3- استفاده از OWASP’s CSRF Guard


OWASP  سازمان بین المللی جهت استاندارد کردن ایمن سازی در طراحی و پیاده سازی می باشد. (Open Web Application Security Project)


یک نمونه کد PHP مشکل دار بصورت زیر است:


<?php
    if (isset($_POST["user"], $_POST["pass"])){
        // code for checking the user and password
    } else {
        echo '
            <form method="post">
                <input name="user">
                <input name="pass" type="password">
                <input type="submit">
            </form>
        ';
    }
?>


این کد اجرای عملیات از سمت فرستنده را بررسی نمیکند که دستور اجرایی از چه طریقی اجرا میشود. آیا یک کاربر واقعی است یا خیر. 


کدی که میتواند کاربر بازدید کننده را با توجه به کد بالا فریب دهد:


 


<form id="LoginForm" action="http://target/login.php" method="post">
    <input name="user" value="foo">
    <input name="pass" type="password" value="bar">
    <input type="submit">
</form>

<script>
    document.getElementById("LoginForm").submit();
</script>

 


مرورگر یک درخواست POST با اعتبار ورود به صفحه PHP که چک می کند اگر آنها درست باشند و سپس  کاربران به سیستم لاگین میشوند.


نظرات

بصیر پچاز ۲۱ / ۶ / ۱۳۹۵
با توجه به این که این روزها اکثر سایت گزینه مرا به خاطر بسپار رو در هنگام لاگین کاربر فعال کرده اند، اطلاعات شخص قربانی رو از طریق کوکی ها استخراج می کن و بدون نیاز به مراجعه به صفحه لاگین، از طریق ارسال درخواست پست به آدرس صفحه لاگین، به عنوان کاربر معتبر session رو معتبر می کنن و اطلاعات قربانی رو سرقت می کنند. رمزنگاری اطلاعات ذخیره شده رو فراموش نکنین
پاسخ به این نظر
محتوای آخرین دربهای گشوده شده
  • یک باک بنزین 206 معادل 75000 ت بوسیله کلیدک
  • 45000 تومان وجه نقد رایج مملکت بوسیله کلیدک
  • بن خرید یک عدد پیتزا American معادل 35ت بوسیله کلیدک
  • دو عدد  کارت سبز بوسیله کلیدک
  • دو روز ناهار میهمان شرکت به انتخاب خودتان معادل هر نهار ۳۰ ت بوسیله کلیدک
  • بن خرید یک عدد پیتزا American معادل 35ت بوسیله کلیدک
  • بن خرید یک عدد پیتزا American معادل 35ت بوسیله کلیدک
  • 45000 تومان وجه نقد رایج مملکت بوسیله کلیدک
ارسال درخواست دوره یا محتوای آموزشی