عنوان:

‫بررسی امنیتی، حین استفاده از jQuery Ajax


نویسنده: وحید نصیری
تاریخ: ۱۳۹۰/۰۱/۱۵ ۱۸:۲۵:۰۰
آدرس: www.dntips.ir

چندین نمونه استفاده از 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 می‌باشد.
  • ایمان اسلامی در ۱۳۹۱/۰۴/۱۳ ۲۰:۸
    با تشکر از مطالب پر بارتون
    مهندس جهت تکمیل این بحث و کامل شدن مسئله امنیتی می‌توان این مطلب شما را نیز به عنوان تکمیل کننده این بحث در نظر گرفت؟
    حذف هدرهای مربوط به وب سرور از یک برنامه‌ی ASP.Net
    • وحید نصیری در ۱۳۹۱/۰۴/۱۳ ۲۰:۱۴
      حذف هدر وب سرور بیشتر جهت مقابله با اسکنرهای خودکار می‌تونه کاربرد داشته باشه و عموم این اسکنرها هم کاری به Ajax ندارند یا درکی از آن ندارد (تا جایی که بررسی کردم).
  • ایمان اسلامی در ۱۳۹۱/۰۴/۱۳ ۲۰:۲۰
    پس برای تکمیل این بحث که نقطع ضعفش طبق اشاره شما همان هدرهای رسیده می‌باشد نظارت دیگری هم میشه انجام داد؟
    • وحید نصیری در ۱۳۹۱/۰۴/۱۳ ۲۰:۳۳
      هدر رسیده نقطه ضعف نیست. نقطه قوت است. چون بر اساس آن (تا حدودی) مشخص می‌شود که مرورگر درخواست را ارسال کرده یا یک ربات.
      بررسی referrer هم خوب است.
      بررسی host ارسال کننده درخواست هم مفید است. تمام این‌ها در هدرهای رسیده لحاظ می‌شوند.
      • ایمان اسلامی در ۱۳۹۱/۰۴/۱۳ ۲۳:۳۷
        ممنونم.مثل همیشه عالی.
  • خیام در ۱۳۹۲/۱۱/۲۵ ۲:۳۲
    برای اینکه کاملا مطمئن بشیم که وب سرویس توسط اسکریپت سایت جاری فراخوانی میشه ، بجز این روشی که شما فرمودین راه دیگه ای هست ؟  با توجه به گفته شما باز هم راه برای دور زدن آن هست و اینکه خود ASP.NET MVC  چطور مدیریت کامل روی این موضوع دارد ؟

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