بررسی امنیتی، حین استفاده از jQuery Ajax
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: یک دقیقه


چندین نمونه استفاده از jQuery Ajax در ASP.NET Webforms را در این سایت می‌توانید پیدا کنید؛ برای مثال:

سؤالی که در تمام این موارد حائز اهمیت است این مورد می‌باشد که "از کجا متوجه شوم وب سرویس مورد استفاده واقعا توسط اسکریپت سایت جاری فراخوانی شده و نه توسط یک برنامه‌ی خارجی؟"

در اینجا می‌توان از سورس‌های ASP.NET MVC کمک گرفت : (+). همان متد IsAjaxRequest را در ASP.NET Webforms هم می‌شود استفاده کرد:

public static bool IsAjaxRequest(this HttpRequestBase request)
{
if (request == null)
{
throw new ArgumentNullException("request");
}

return (request["X-Requested-With"] == "XMLHttpRequest") ||
((request.Headers != null) && (request.Headers["X-Requested-With"] == "XMLHttpRequest"));
}

حاصل IsAjaxRequest باید در ابتدای تمام درخواست‌های رسیده بررسی شود. البته باید دقت داشت که این بررسی را به آسانی می‌توان دور زد (چون بر اساس هدرهای رسیده است)، اما باز هم بهتر از هیچ نوع نظارتی می‌باشد.

  • #
    ‫۱۳ سال و ۷ ماه قبل، دوشنبه ۱۵ فروردین ۱۳۹۰، ساعت ۲۳:۱۱
    جهت تکمیل: در اینجا HttpRequestBase همان HttpContext.Current.Request می‌باشد.
    • #
      ‫۱۲ سال و ۴ ماه قبل، چهارشنبه ۱۴ تیر ۱۳۹۱، ساعت ۰۰:۴۴
      حذف هدر وب سرور بیشتر جهت مقابله با اسکنرهای خودکار می‌تونه کاربرد داشته باشه و عموم این اسکنرها هم کاری به Ajax ندارند یا درکی از آن ندارد (تا جایی که بررسی کردم).
  • #
    ‫۱۲ سال و ۴ ماه قبل، چهارشنبه ۱۴ تیر ۱۳۹۱، ساعت ۰۰:۵۰
    پس برای تکمیل این بحث که نقطع ضعفش طبق اشاره شما همان هدرهای رسیده می‌باشد نظارت دیگری هم میشه انجام داد؟
    • #
      ‫۱۲ سال و ۴ ماه قبل، چهارشنبه ۱۴ تیر ۱۳۹۱، ساعت ۰۱:۰۳
      هدر رسیده نقطه ضعف نیست. نقطه قوت است. چون بر اساس آن (تا حدودی) مشخص می‌شود که مرورگر درخواست را ارسال کرده یا یک ربات.
      بررسی referrer هم خوب است.
      بررسی host ارسال کننده درخواست هم مفید است. تمام این‌ها در هدرهای رسیده لحاظ می‌شوند.
      • #
        ‫۱۲ سال و ۴ ماه قبل، چهارشنبه ۱۴ تیر ۱۳۹۱، ساعت ۰۴:۰۷
        ممنونم.مثل همیشه عالی.
  • #
    ‫۱۰ سال و ۸ ماه قبل، جمعه ۲۵ بهمن ۱۳۹۲، ساعت ۰۶:۰۲
    برای اینکه کاملا مطمئن بشیم که وب سرویس توسط اسکریپت سایت جاری فراخوانی میشه ، بجز این روشی که شما فرمودین راه دیگه ای هست ؟  با توجه به گفته شما باز هم راه برای دور زدن آن هست و اینکه خود ASP.NET MVC  چطور مدیریت کامل روی این موضوع دارد ؟

    به نظر شما استفاده از هندلرها در چنین مواقعی که مثلن قرار است از بانک اطلاعاتی واکشی داشته باشیم بهتر است ؟ یا همان وب سرویس استفاده کنیم ؟
    • #
      ‫۱۰ سال و ۸ ماه قبل، جمعه ۲۵ بهمن ۱۳۹۲، ساعت ۱۲:۴۲
      - علاوه بر مطلب و نکاتی که در کامنت‌ها مطرح شده، روش استفاده از آنتی‌فورجری توکن هم مفید است. ترکیبی است از یک فیلد مخفی به همراه یک کوکی رمزنگاری شده.
      - بهتر است بجای این‌ها از ASP.NET Web API استفاده کنید.